gpt4 book ai didi

java - 具有 @ElementCollection 和 @CollectionTable 的 Hibernate 实体。 Hibernate在检索集合时将属性名称添加到SQL语句中

转载 作者:行者123 更新时间:2023-11-30 05:27:00 26 4
gpt4 key购买 nike

就我而言,我有两个表:父级“VDI_DICT_EMPOYEES_SV”和子级“VDI_DICT_EMPOYEES_RV”由具有相同名称“R_OBJECT_ID”的列连接。 (参见ER图)

enter image description here

“父”实体的结构是:

@Entity
@Table(name="VDI_DICT_EMPLOYEE_SV")
public class DmDictEmployee {
@Column (name="R_OBJECT_ID") private String objectId;

... other columns are skipped...

@ElementCollection
@CollectionTable(name="VDI_EMPLOYEE_RV, joinColumns=@JoinColumn(name="CROC_SECRETARY_ID",referencedColumnName="R_OBJECT_ID"))
private List<String> crocSecretaryIds; // the element collection

... getters and setters are skipped too...

}

为了获取主数据和从数据,我使用 native @Query

"SELECT parent.*, chield.CROC_SECRETARY_ID from VDI_DICT_EMPLOYEE_SV parent left outer join VDI_DICT_EMPLOYEE_RV chield on parent.R_OBJECT_ID=chield.R_OBJECT_ID"

(这将在一次选择中选择包含秘书列表的员工条目)

正如我从日志中看到的那样,它工作得很好。查询返回数据就好了。但是当我尝试检索 crocSecretaryIds 列表时,我看到 HIBERNATE 准备了包含集合名称的 SQL:“从 VDI_DICT_EMPLOYEES_RV WHERE R_OBJECT_ID=... 中选择 CROC_SECRETARY_ID、crocSecretaryIds”(参见下一个屏幕截图)

enter image description here

这很奇怪。我希望看到没有 crocSecretaryIds 的 SQL 查询,因此,我假设 @ElementCollection 列的声明有问题。您能否告诉我们遗漏了什么以及为什么 HIBERNATE 使用 crocSecretaryIds 准备查询?

最佳答案

最后我意识到我错误地引用了“child”表。而不是

@ElementCollection
@CollectionTable(name="VDI_EMPLOYEE_RV, joinColumns=@JoinColumn(name="CROC_SECRETARY_ID",referencedColumnName="R_OBJECT_ID"))
private List<String> crocSecretaryIds; // the element collection

我需要做:

@ElementCollection
@CollectionTable(name="VDI_EMPLOYEE_RV, joinColumns=@JoinColumn(name="R_OBJECT_ID",referencedColumnName="R_OBJECT_ID"))
@Column(name="CROC_SECRETARY_ID") // the column name in child table
private List<String> crocSecretaryIds;

所以,现在可以了。

关于java - 具有 @ElementCollection 和 @CollectionTable 的 Hibernate 实体。 Hibernate在检索集合时将属性名称添加到SQL语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58356741/

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