假设有两个表,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"
将A
的{{1}}的所有实例与null
中的b
的第一个/最后一个一起显示的方式有什么回报?
答案 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子节点。