【发布时间】:2011-06-14 19:01:58
【问题描述】:
使用休眠条件时,仅更改连接类型会影响根域类的子集合的结果。
例如,让 Parent 类与 Child 类具有一对多关系,并具有以下数据:
家长 |编号 |姓名 | | 1 |家长 1 | 孩子 |编号 | parent_id |姓名 | | 1 | 1 |孩子1 | | 2 | 1 |孩子2 |使用以下休眠条件返回 1 个父行,访问子集合会返回两行:
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.INNER_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
但是,当使用左连接更改上述代码时,返回 1 个父行,但访问子集合时仅返回匹配的子行。
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.LEFT_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
为什么会出现这种副作用?我发现了一些关于使用或避免这种副作用的讨论,具体取决于您的预期结果,但没有关于它首先存在的原因以及它是否是预期的。最接近的直接问题是旧的陈旧缺陷 (http://opensource.atlassian.com/projects/hibernate/browse/HHH-3872)。
- 编辑 3/24:固定数据 *
【问题讨论】:
-
伙计,我所有的知识都告诉我,内部连接应该只获取一行。我想你这里有事。我会将其添加为书签,以便遵循我所缺少的内容。如果我是,我会非常感谢你。
-
Child2 上的父 ID 是否错误?是 1 吗?
-
@MikelRascher - 是的,Child2 的父 ID 错误。我现在已经解决了。
标签: hibernate criteria hibernate-criteria