0

我有我查看(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发出请求hql时,它返回的问题是:重复的行有重复的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 请求工作正常!

4

2 回答 2

1

如果您的视图中有几行具有相同 ID,则表示您的 ID 不是 ID。从您发布的内容来看,它似乎[IDBQ, IDR]应该是实体的 ID。

于 2012-05-23T16:40:03.300 回答
0

您看到重复行的原因是因为您有 2 条具有相同主键的记录(在您的情况下为 IDBQ)。从数据库中检索数据时,具有相同标识符的记录将引用相同的对象(取决于顺序)。这称为身份映射模式。点击此链接了解更多信息!

即使您的视图在查询编辑器上有 2 个具有相同标识符的不同行,您的实体框架也会产生不正确的输出。当从数据库加载 IDBQ 值为“1”的第一行时,将按预期检索它,但当检索到具有相同 IDBQ 值“1”的第二行时,返回相同的对象 (1 | 1 | xx | xxx),因为已加载 PK '1' 的对象。希望你觉得这很有帮助。

于 2017-05-29T12:34:19.780 回答