【问题标题】:JPA one-to-many query result problemJPA 一对多查询结果问题
【发布时间】:2011-04-28 21:00:34
【问题描述】:

好的,我在父类和子类之间有一个一对多的映射。我可以保存父对象,它会自动保存子对象,但问题是在父类上执行 SELECT 时。似乎我正在为数据库表中的每个子对象获取一个父对象。 因此,如果我用 2 个子对象保存 1 个父对象,当我使用 Hibernate 选择标准时,我会得到 2 个父对象!!! 我想要的只是让 Hibernate 在 Set child 字段中返回 1 个父对象及其 2 个子对象。

我猜我的映射一定是错误的。有人可以帮忙吗?

class Parent{
 Long parentId;
 @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
 @JoinColumn(name = "parent_table_id", nullable = false)
 Set childs;
 ....
}

class Child{
 Long childId;

}

注意:“parent_table_id”引用父主键。此外,此值未映射到任何父对象或子对象。我手动插入了这个值,并且只在 @JoinColumn 注释中使用它。 好的,我是这个 JPA 的新手,但是当我保存带有子对象的父对象时,Hibernate 似乎会自动在子表中插入字段“parent_table_id”的值。 这会导致问题吗?

【问题讨论】:

  • 当您在条件查询中执行内部连接时,如果您不设置 DISTINCT_ROOT_ENTITY,实际上您将获得结果集中每一行的对象。您的映射看起来不错,有人会建议发布不符合您要求的查询:)

标签: java hibernate jpa


【解决方案1】:

您的映射看起来不错,听起来您真正需要的是:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

当您执行内部联接时,会导致在您的条件查询中返回多个结果行。

【讨论】:

  • 是的,这实际上解决了我的问题。我不记得在使用那些 Hibernate.hbm.xml 映射文件时遇到过这个问题。生成的查询前后也是相同的!!我猜想通过添加 DISTINCT_ROOT_ENTITY Hibernate 添加一个过滤器来删除重复的 Parent 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
相关资源
最近更新 更多