hibernate实体中的复杂关系

时间:2013-10-28 18:29:06

标签: java hibernate

我有3个entites之间关系的问题:Form,FormConfig和GroupForms。该模型是Form和GroupForms之间的许多关系,但是有一些与此连接相关联的附加数据,因此我建模了实体FormConfig。 Form与OneToMany关系中的FormConfig相关,而GroupForms与OneToMany关系中的FormConfig相关。在代码中它看起来像:

Form.java:

...
@OneToMany(mappedBy = "form", cascade = CascadeType.ALL)
private List<FormConfig> formConfigs = new ArrayList<FormConfig>();
...

GroupForms.java:

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

我创建了一些组,现在我想创建新的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 个答案:

答案 0 :(得分:2)

这很可能是由以下原因造成的:

@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