2010-10-21 154 views
0

好吧我有一个一对多的父类和子类之间的映射。我可以保存父母,它会自动保存子对象,但问题是在父类上执行SELECT时。看来我正在为数据库表中的每个Child对象获取一个Parent对象。 因此,如果我保存1个父对象与2个子对象,当我使用Hibernate选择条件我得到2个父对象! 我只想让Hibernate在Set子域中返回1个父对象及其2个子对象。JPA一对多查询结果问题

我想我的映射必定是错的。有人可以帮助这个吗?

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” 引用父主键。此值也不映射到任何Parent或Child对象。我手动插入此值,并只在@JoinColumn注释中使用它。 好吧,我是新来这个JPA的东西,但似乎Hibernate会自动插入字段“parent_table_id”在Child表中的值,当我保存一个Parent与Child对象。 这可能导致问题?

+1

当您在条件查询中执行内部连接时,如果未设置DISTINCT_ROOT_ENTITY,实际上会为结果集中的每一行获取一个对象。你的映射看起来很好,你可以建议发布不符合你要求的查询:) – Affe 2010-10-21 21:41:02

回答

1

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

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

为你进行内部连接的结果在不止一个结果排在条件查询返回。

+0

是的,这实际上解决了我的问题。当我使用这些Hibernate.hbm.xml映射文件时,我不记得有这个问题。此外,前后生成的查询是相同的!我猜想通过添加DISTINCT_ROOT_ENTITY Hibernate添加了一个过滤器来删除重复的父对象。 – Marquinio 2010-10-21 23:39:32