代码之家  ›  专栏  ›  技术社区  ›  Boris Kirzner

hql:可空属性的order-by属性

hql
  •  4
  • Boris Kirzner  · 技术社区  · 15 年前

    假设有两张桌子, A[a_id, b_id] B[b_id,c] .

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

    但是,查询只返回 非空的 财产。 这是因为hibernate生成sql的形式 "SELECT FROM A,B WHERE A.b_id = B.b_id ORDER BY B.c"

    返回所有实例的方法是什么 与那些拥有 null 在里面 出现在第一个/最后一个?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Michał Powaga Mohamed Aslam    13 年前

    如何:

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

    左连接负责创建连接,即使 b_fk Java实体(不是表)上的属性为NULL。

    编辑 :抱歉,我提到过用不同的方法对空值进行排序。若要排序(不考虑空值),可以指定“DESC”来逆排序顺序(默认值=“ASC”)。对于nulls,我相信hibernate允许默认的数据库顺序…在你的数据库中自己尝试一下,看看会发生什么(很抱歉在文章的第一个版本中误导了你)。

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

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

        2
  •  0
  •   Nikhil Freddroid    12 年前

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

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

    它是hql语法!

    “left join”允许在子项为空时显示行。

    实际上,如果不指定连接,hibernate会自动创建一个“内部连接”,删除空的子连接。