当使用左联接条件时,Hibernate子集合受到限制
使用hibernate条件时,仅更改联接类型会影响根域类的子集合的结果 例如,让类父级与具有以下数据的类子级具有一对多关系: Parent | id | Name | | 1 | Parent 1 | Child | id | parent_id | Name | | 1 | 1 | Child1 | | 2 | 1 | Child2 | 但是,当使用左联接更改上述代码时,将返回1父行,但在访问子集合时仅返回匹配的子行当使用左联接条件时,Hibernate子集合受到限制,hibernate,criteria,hibernate-criteria,Hibernate,Criteria,Hibernate Criteria,使用hibernate条件时,仅更改联接类型会影响根域类的子集合的结果 例如,让类父级与具有以下数据的类子级具有一对多关系: Parent | id | Name | | 1 | Parent 1 | Child | id | parent_id | Name | | 1 | 1 | Child1 | | 2 | 1 | Child2 | 但是,当使用左联接更改上述代码时,将返回1父行,但在访问子集合时仅返回匹配的子行 session.cre
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.LEFT_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
为什么会出现这种副作用?我发现了一些关于使用或避免这种副作用的讨论,这取决于你的预期结果,但没有讨论为什么会有这种副作用,以及它是否是预期的。最直接的问题是一个陈旧的缺陷()
- 编辑3/24:固定数据*
- 左联接:执行一个包含父项和一个匹配子项的查询,调用getChildren()时不执行后续查询
- 内部联接:执行两个查询:一个用于查找具有匹配子项的父项,另一个用于调用getChildren()时
我没有足够的经验来判断这是否是一个bug,但我感觉它不像一个bug。这里描述了这个问题,并且似乎在Hibernate 3.6中得到了修复
伙计,我所有的知识都告诉我,内部连接只能获取一行。我想你有什么事。我会把它加入书签,这样就可以知道我遗漏了什么。如果我是的话,我会非常感谢你。孩子2上的家长id错了吗?是不是应该是1?@MikelRascher-是的,孩子2的父母id是错误的。我现在已经修好了。
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.LEFT_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()