【问题标题】:HQL: order by property of nullable propertyHQL:按可空属性的属性排序
【发布时间】:2010-11-19 08:29:32
【问题描述】:

假设有两个表,A[a_id, b_id]B[b_id,c]

我需要执行表单"From A a ORDER BY a.b.c" 的HQL 查询,而b 在类A 中可以为空。

但是,该查询仅返回具有非空 b 属性的 A 实例。 这是因为 Hibernate 生成了 "SELECT FROM A,B WHERE A.b_id = B.b_id ORDER BY B.c" 形式的 SQL

返回A 的所有实例以及b 中具有null 的实例首先出现/最后出现的方法是什么?

【问题讨论】:

    标签: hql


    【解决方案1】:

    怎么样:

    from A a left join a.b_fk b order by b.c
    

    即使 java 实体(不是表)上的 b_fk 属性为空,左连接也负责进行连接。

    已编辑:抱歉,我提到过以不同方式对空值进行排序。要排序(不考虑空值),您可以指定 'desc' 来反转排序顺序(默认 = 'asc')。对于空值,我相信 Hibernate 允许默认数据库顺序...在您的数据库上自己尝试一下,看看会发生什么(对不起,在第一个版本的帖子中误导)。

    很多信息可以在Hibernate的参考文档中找到:
    http://docs.jboss.org/hibernate/stable/core/reference/en/html/queryhql.html

    其余的通常取决于您使用的数据库...

    【讨论】:

      【解决方案2】:

      我有同样的问题,我已经解决了:

      SELECT a
      FROM a
      LEFT JOIN a.b b 
      LEFT JOIN b.c c
      ORDER BY c.id
      

      HQL 语法!

      “LEFT JOIN”允许在子节点为 NULL 时显示行。

      事实上,如果你不指定join,hibernate会自动创建一个“INNER JOIN”来移除NULL子节点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多