【发布时间】:2016-03-21 14:48:30
【问题描述】:
假设我有一个包含 Bar 列表的对象 Foo。 如果我在 Bar 类上为我的 Criteria 创建别名,我只会收到实际具有 Bars 的项目。
criteria.createAlias("bars", "bars");
现在,如果我想拥有所有没有 Bars 的 Foo,我必须使用 LEFT OUTER JOIN 创建我的别名。
criteria.createAlias("bars", "bars", JoinType.LEFT_OUTER_JOIN);
现在,我的 Foo 班级有大量的孩子(有孩子,有孩子,......)。我现在是否必须将它们全部 LEFT_OUTER_JOIN 或是否有其他解决方案以便我的列表完整,而不是我的列表仅包含具有适当孩子的 Foos?
【问题讨论】:
-
使用左外连接并不意味着你只能得到那些没有孩子的人,但你会得到他们以及。您必须添加另一个条件,即 count(children) = 0 或 children = null (或类似的)。
-
正是我想要的。我想要有孩子和没有孩子的人。所以唯一的解决办法就是把它们都留到外面去?
-
可能是的,虽然我不太了解标准,但我想您必须在所有连接上指定连接类型(获取连接除外)。如果您的查询中有多个联接,则它们可能用于某些目的,而不是仅限于那些有孩子的联接。如果这是唯一的原因,并且您删除了您可能想要删除的一般连接。