【问题标题】:Complex relation in hibernate entities休眠实体中的复杂关系
【发布时间】:2013-11-07 16:08:51
【问题描述】:

我对 3 个实体之间的关系有以下问题:Form、FormConfig 和 GroupForms。模型是Form和GroupForms之间的manyToMany关系,但是有一些额外的数据与这个join关联,所以我建模了实体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>();

表单配置:

...
@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 */
}

我两次调用这个函数,为一组,这意味着我想创建两个表单,这些表单应该在一个组中。但不幸的是,使用休眠的查询在实体 GroupForms 中返回了两行。我检查了我的表格,表格中只有一行与实体 GroupForms 关联。任何人都可以帮忙吗?我不知道为什么 hibernate 返回的 GroupForms 比数据库中存在的多。

问候

【问题讨论】:

  • 您使用的查询是什么?
  • 类似:Query q = session.createQuery("FROM " + "GroupForms" + " o ORDER BY " + sort + " " + this.setOrder(order));定义 order 和 sort 的地方
  • 请粘贴生成的SQL,执行时可以在日志或控制台中找到。我对查询中的this.setOrder(order) 部分感到困惑。

标签: java hibernate


【解决方案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

【讨论】:

猜你喜欢
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多