hibernate实体中的java复杂关系
我对3个实体之间的关系有以下问题:Form、FormConfig和GroupForms。这个模型在表单和GroupForms之间有很多关系,但是有一些额外的数据与这个连接相关,所以我对实体FormConfig进行了建模。表单在OneToMany关系中与FormConfig相关,GroupForms在OneToMany关系中与FormConfig相关。在代码中,它看起来像:
形式。爪哇:
...
@OneToMany(mappedBy = "form", cascade = CascadeType.ALL)
private List<FormConfig> formConfigs = new ArrayList<FormConfig>();
...
团体形式。爪哇:
...
@OneToMany(mappedBy="group", fetch=FetchType.EAGER)
private List<FormConfig> formConfigs = new ArrayList<FormConfig>();
FormConfig:
...
@ManyToOne
@JoinColumn(name = "kf_grupa_id")
private GroupForms group;
@ManyToOne
@JoinColumn(name = "kf_formularz_id")
private Form form;
....
我创建了一些组,现在我想创建新表单并将其加入到GroupForms中,所以:
void createFormInGroup(GroupForms groupForms) {
Form form = new Form();
/*setters execution*/
form.set(..);
....
FormConfig formConfig = new FormConfig();
/*setters execution*/
formConfig.set(..);
....
formConfig.setGroup(groupForms);
formConfig.setForm(form);
form.getFormConfigs().add(formConfig);
groupForms.getFormConfigs().add(formConfig);
/* code responsible for beginTransaction */
session.saveOrUpdate(formConfig);
session.saveOrUpdate(form);
session.saveOrUpdate(groupForms);
/* code responsible for endTransaction */
}
我调用这个函数两次,对于一个组,这意味着我想创建两个表单,这些表单应该在一个组中。但不幸的是,使用hibernate的查询返回了实体GroupForms中的两行。我检查我的表,表中只有一行与实体GroupForms关联。有人能帮忙吗?我不知道为什么hibernate返回的GroupForms比数据库中的多
问候
# 1 楼答案
这很可能是由以下原因造成的:
@OneToMany(mappedBy=“group”,fetch=FetchType.EAGER)
更多讨论请参见此处:
Hibernate Criteria returns children multiple times with FetchType.EAGER
我对一个类似问题的回答如下:
Hibernate and criteria that return the same items multiple times