在视图中具有重复主键的重复行

时间:2012-05-23 16:09:22

标签: hibernate

我有观看(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请求工作了!

2 个答案:

答案 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'已加载。 希望你觉得这很有帮助。