HQL:按可空属性的属性排序

时间:2009-08-13 15:32:55

标签: hql

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

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

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

形式的SQL

A的{​​{1}}的所有实例与null中的b的第一个/最后一个一起显示的方式有什么回报?

2 个答案:

答案 0 :(得分:0)

怎么样:

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

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

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

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

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

答案 1 :(得分:0)

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

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

它是用HQL语法编写的!

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

实际上,如果你没有指定连接,hibernate会自动创建一个“INNER JOIN”来删除NULL子节点。