我有一个要在一个 SQL 语句中执行的 Hibernate 条件调用。我正在尝试做的是选择具有一系列值(SQL IN 子句)中的属性的子级的父级实例,同时使用外连接加载子级。这是我到目前为止所拥有的:
Criteria c = session.createCriteria(Parent.class);
c.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN)
.setFetchMode("c", FetchMode.JOIN)
.add(Restrictions.in("c.property", properties));
c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
return c.list();
以下是一些示例数据:
Parent
Parent ID
A
B
C
Children
Child ID Parent ID property
... A 0
... A 2
... A 7
... B 1
... C 1
... C 2
... C 3
如果其中一个孩子的属性等于我的绑定参数,我想要做的是返回父母和他们的所有孩子。假设 properties 是一个包含 {2} 的数组。在这种情况下,调用将返回父级 A 和 C,但它们的子集合将仅包含元素 2。即 Parent[Children]:
A[2] 和 C[2]
我想要的是:
A[0, 2, 7] & C[1, 2 3]
如果这不是一个错误,它似乎是一个损坏的语义。我看不出调用 A.getChildren() 或 C.getChildren() 并返回 1 条记录会被认为是正确的——这不是预测。即,如果我增加查询以使用默认选择提取,它会返回正确的子集合,尽管有大量查询:
c.createAlias("children", "c").add(
Restrictions.in("c.property", properties));
这是一个错误吗?如果没有,我怎样才能达到我想要的结果?