gpt4 book ai didi

java - Hibernate 注释 referencedcolumnname 不起作用,referencedcolumnname 自动分配给另一个实体的主键

转载 作者:行者123 更新时间:2023-12-05 06:44:03 24 4
gpt4 key购买 nike

在 enthesaplasmaek 实体中,我与我的两个实体 EntHesaplasma 和 EntHesaplasmaek 建立了如下关系

@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="hesaplasmaekid",referencedColumnName="carihareketid",insertable=false,updatable=false)
@Where(clause = "enthesaplasma.evraktip='EK'")
public EntHesaplasma getEnthesaplasma() {
return enthesaplasma;
}

当我运行下面的 hql 时,hibernate 在 hesaplasmaekid 和 hesaplasmaid(enthesaplasma 实体的主键 (@Id))之间建立关系。但正确的关系应该是enthesaplasma实体中的carihareketid和enthesaplasmaek实体中的enthesaplasmaekid。

select hs.hesaplasmaid,hs.carihareketid,ek.hesaplasmaekid,hs.hesaplasmano,ek.aciklama from EntHesaplasmaek ek left join ek.enthesaplasma hs

查询结果(来自 Eclipse 中的 Hibernate 查询编辑器)

result of the query

我该如何纠正这个错误?谢谢。

我的实体在下面

EntHesaplasma 实体

@Entity
@Table(name = "XOZ_HESAPLASMA")
public class EntHesaplasma {

Integer hesaplasmaid;
@Transient
EntCariHareketler carihareket;
@Resolvable(colName = "Hesaplaşma No",formatter=FormatterInteger.class)
Integer hesaplasmano;
Integer hesaplasmagrupid;
Date datecreated;
Integer carihareketid;
String evraktip;
Boolean isactive;
Double meblag;
EntHesaplasmagrup enthesaplasmagrup;
EntHesaplasmaek enthesaplasmaek;

@Id
@GeneratedValue
@Column(name = "hesaplasmaid", unique = true, nullable = false)
public Integer getHesaplasmaid() {
return hesaplasmaid;
}

public void setHesaplasmaid(Integer hesaplasmaid) {
this.hesaplasmaid = hesaplasmaid;
}

@Column(name = "datecreated")
public Date getDatecreated() {
return datecreated;
}

public void setDatecreated(Date datecreated) {
this.datecreated = datecreated;
}

@Column(name = "hesaplasmano")
public Integer getHesaplasmano() {
return hesaplasmano;
}

//@OneToOne(fetch= FetchType.LAZY)
//@JoinColumn(name="carihareketid")
@Transient
public EntCariHareketler getCarihareket() {
return carihareket;
}

public void setCarihareket(EntCariHareketler carihareket) {
this.carihareket = carihareket;
}


public void setHesaplasmano(Integer hesaplasmano) {
this.hesaplasmano = hesaplasmano;
}

@Column(name = "carihareketid")
public Integer getCarihareketid() {
return carihareketid;
}

public void setCarihareketid(Integer carihareketid) {
this.carihareketid = carihareketid;
}

@Column(name="isactive")
public Boolean getIsactive() {
return isactive;
}

public void setIsactive(Boolean isactive) {
this.isactive = isactive;
}

@Column(name="meblag")
public Double getMeblag() {
return meblag;
}

public void setMeblag(Double meblag) {
this.meblag = meblag;
}

@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="hesaplasmagrupid")
public EntHesaplasmagrup getEnthesaplasmagrup() {
return enthesaplasmagrup;
}

public void setEnthesaplasmagrup(EntHesaplasmagrup enthesaplasmagrup) {
this.enthesaplasmagrup = enthesaplasmagrup;
}

@Column(name="hesaplasmagrupid",insertable=false,updatable=false)
public Integer getHesaplasmagrupid() {
return hesaplasmagrupid;
}

public void setHesaplasmagrupid(Integer hesaplasmagrupid) {
this.hesaplasmagrupid = hesaplasmagrupid;
}

@Column(name="evraktip")
public String getEvraktip() {
return evraktip;
}

public void setEvraktip(String evraktip) {
this.evraktip = evraktip;
}

@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="carihareketid",referencedColumnName="hesaplasmaekid",insertable=false,updatable=false)
@Where(clause = "evraktip='EK'")
public EntHesaplasmaek getEnthesaplasmaek() {
return enthesaplasmaek;
}

public void setEnthesaplasmaek(EntHesaplasmaek enthesaplasmaek) {
this.enthesaplasmaek = enthesaplasmaek;
}




}

EntHesaplasmaek 实体

@Entity
@Table(name = "XOZ_HESAPLASMAEK")
public class EntHesaplasmaek {

Integer hesaplasmaekid;
@Resolvable(colName="Bakiye",formatter=DoubleFormatter.class)
Double bakiye;
@Resolvable(colName="Açıklama")
String aciklama;
Integer konuid;
Boolean boolzamanlanmis;
Integer zamanid;
Date datecreated;
@Resolvable(colName="Tarih",formatter=DateFormatterTbl.class)
Date evraktarih;
@Resolvable(colName="Hesaplasma No",formatter=FormatterInteger.class)
@Transient
Integer hesaplasmano;
Integer hesaplasmagrupid;
EntHesaplasmagrup enthesaplasmagrup;
EntHesaplasma enthesaplasma;

@Id
@GeneratedValue
@Column(name = "hesaplasmaekid", unique = true, nullable = false)
public Integer getHesaplasmaekid() {
return hesaplasmaekid;
}
public void setHesaplasmaekid(Integer hesaplasmaekid) {
this.hesaplasmaekid = hesaplasmaekid;
}

@Column(name="bakiye")
public Double getBakiye() {
return bakiye;
}
public void setBakiye(Double bakiye) {
this.bakiye = bakiye;
}

@Column(name="aciklama")
public String getAciklama() {
return aciklama;
}
public void setAciklama(String aciklama) {
this.aciklama = aciklama;
}

@Column(name="konuid")
public Integer getKonuid() {
return konuid;
}
public void setKonuid(Integer konuid) {
this.konuid = konuid;
}

@Column(name="boolzamanlanmis")
public Boolean getBoolzamanlanmis() {
return boolzamanlanmis;
}
public void setBoolzamanlanmis(Boolean boolzamanlanmis) {
this.boolzamanlanmis = boolzamanlanmis;
}

@Column(name="zamanid")
public Integer getZamanid() {
return zamanid;
}
public void setZamanid(Integer zamanid) {
this.zamanid = zamanid;
}

@Column(name="datecreated")
public Date getDatecreated() {
return datecreated;
}
public void setDatecreated(Date datecreated) {
this.datecreated = datecreated;
}

@Column(name="evraktarih")
public Date getEvraktarih() {
return evraktarih;
}
public void setEvraktarih(Date evraktarih) {
this.evraktarih = evraktarih;
}

@Transient
public Integer getHesaplasmano() {
return hesaplasmano;
}
public void setHesaplasmano(Integer hesaplasmano) {
this.hesaplasmano = hesaplasmano;
}

@Column(name="hesaplasmagrupid",insertable=false,updatable=false)
public Integer getHesaplasmagrupid() {
return hesaplasmagrupid;
}
public void setHesaplasmagrupid(Integer hesaplasmagrupid) {
this.hesaplasmagrupid = hesaplasmagrupid;
}

@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="hesaplasmagrupid")
public EntHesaplasmagrup getEnthesaplasmagrup() {
return enthesaplasmagrup;
}

public void setEnthesaplasmagrup(EntHesaplasmagrup enthesaplasmagrup) {
this.enthesaplasmagrup = enthesaplasmagrup;
}

@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="hesaplasmaekid",referencedColumnName="carihareketid",insertable=false,updatable=false)
@Where(clause = "enthesaplasma.evraktip='EK'")
public EntHesaplasma getEnthesaplasma() {
return enthesaplasma;
}
public void setEnthesaplasma(EntHesaplasma enthesaplasma) {
this.enthesaplasma = enthesaplasma;
}



}

最佳答案

有点晚了,但遇到了同样的问题。不能设置双向关系不是bug,一方面需要使用JoinColumn,另一方面通过mappedBy映射它。所以是的..这里的解决方案是正确的!

我在这里找到了解释: How do I join tables on non-primary key columns?

关于java - Hibernate 注释 referencedcolumnname 不起作用,referencedcolumnname 自动分配给另一个实体的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31153977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com