【问题标题】:Hibernate get items that don't have childrenHibernate 获取没有子项的项目
【发布时间】: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 (或类似的)。
  • 正是我想要的。我想要有孩子和没有孩子的人。所以唯一的解决办法就是把它们都留到外面去?
  • 可能是的,虽然我不太了解标准,但我想您必须在所有连接上指定连接类型(获取连接除外)。如果您的查询中有多个联接,则它们可能用于某些目的,而不是仅限于那些有孩子的联接。如果这是唯一的原因,并且您删除了您可能想要删除的一般连接。

标签: java hibernate criteria


【解决方案1】:

最后我通过对我的每个孩子执行 LEFT OUTER JOIN 解决了​​这个问题。

criteria.createAlias("bars", "bars", JoinType.LEFT_OUTER_JOIN);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2016-10-26
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多