【问题标题】:hibernate hql different between WITH and WHERE在 WITH 和 WHERE 之间的休眠 hql 不同
【发布时间】:2011-08-14 12:12:58
【问题描述】:

大家好: 我只是在研究 HQL

谁能解释或提供一些关于 HQL 中 WITH 和 WHERE 之间区别的链接?

来自http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

例如:

从猫当猫 left join cat.kittens as kitten 与 kitten.bodyWeight > 10.0

我可以用 where 替换 with 吗?

谢谢

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    With 用于“提供额外的连接条件”,这意味着它被添加到连接而不是 where 子句中:

    from Cat as cat 
      left join cat.kittens as kitten 
      with kitten.bodyWeight > 10.0
    

    会被翻译成这样的;

    from Cat as cat
      left outer join Cat as kitten
        on cat.id = kitten.mother_id 
          and kitten.bodyWeight > 10.0
    

    此时

    from Cat as cat 
      left join cat.kittens as kitten 
    where kitten.bodyWeight > 10.0
    

    被翻译成

    from Cat as cat
      left outer join Cat as kitten
        on cat.id = kitten.mother_id 
    where
      kitten.bodyWeight > 10.0
    

    【讨论】:

    • 太棒了,太详细了!让我试试谢谢
    • 在这个例子中,结果是一样的吗?我对吗?你能提供一些不同结果的例子吗?
    • @user380690:不,它的结果是 not 相同,因为左外连接。第一个查询返回数据库中的所有猫,如果它们有体重超过 10 的小猫,它将加入它们,如果没有,则为小猫设置列 null(但仍返回猫)。第二个查询只返回 拥有 体重超过 10 只小猫的猫。
    【解决方案2】:

    将“with”替换为“where”会将结果限制为 拥有 小猫体重 > 10.0 的 Cats。 使用“with”可以得到没有小猫的猫。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2013-12-27
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多