我有观看(2桌和1个协会),我就像这样
@Id
@Column(name = "IDBQ", precision = 5, scale = 0)
public Integer getIdbq() {
return this.idbq;
}
public void setIdbq(Integer idbq) {
this.idbq = idbq;
}
@Column(name = "IDR", precision = 22, scale = 0)
public Integer getIdr() {
return this.idr;
}
public void setIdr(Integer idr) {
this.idr = idr;
}
@Column(name = "NOM_CLIENT", length = 100)
public String getNomClient() {
return this.nomClient;
}
public void setNomClient(String nomClient) {
this.nomClient = nomClient;
}
@Column(name = "PRENOM_CLIENT", length = 30)
public String getPrenomClient() {
return this.prenomClient;
}
并且因为它是一个视图,许多行中的主键 IDBQ 是重复的。 当我从hibernate发出请求时,问题就是返回:重复的行有重复的Id - > IDBQ
如果我有:
IDBQ -- IDR -- NOM_CLIENT -- PRENOM_CLIENT
1 1 xx xxx
1 2 yy yyy
它在我的hql请求中返回我
1 1 xx xxx
1 1 xx xxx
但是sql请求工作了!
答案 0 :(得分:1)
如果您的视图中有多个具有相同ID的行,则表示您的ID不是ID。根据您发布的内容,[IDBQ, IDR]
似乎应该是实体的ID。
答案 1 :(得分:0)
您看到重复行的原因是因为您有2条记录具有相同的主键(在您的情况下为IDBQ)。从数据库检索数据时,具有相同标识符的记录将引用同一对象(取决于顺序)。这称为身份地图模式。 Follow this link for more info !
即使您的视图在查询编辑器中有2个具有相同标识符的不同行,您的实体框架也会生成错误的输出。 当第一行具有IDBQ值' 1'从数据库加载它是按预期检索的,但当第二行具有相同的IDBQ值' 1'检索到相同的对象(1 | 1 | xx | xxx),因为有一个PK' 1'已加载。 希望你觉得这很有帮助。