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

问题描述 投票:0回答:1

就我而言,我有两个表:父项“ 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...

}

要获取主数据和从数据,我使用本机@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"

(这将选择一个带有秘书列表的员工条目)

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

enter image description here

这很奇怪。我希望看到不带crocSecretaryIds的SQL查询,因此,我认为@ElementCollection列的声明有问题。您能否建议任何想法,以及错过什么以及为什么HIBERNATE使用crocSecretaryIds准备查询?

java hibernate documentum
1个回答
0
投票

最后,我意识到我错误地引用了“子”表。代替

@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; 

所以,现在可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.