2014-09-01 58 views
0

我有3个实体类:PairBATBpaSNSBPa。 实体类对具有相关性,例如pair.snsBpapair.batBpahibernate:排序空值

Pair实体的表,当我对它们进行排序,例如:

ORDER BY pair.snsBpa.snsId (snsId is string) 

HQL删除行,其中pair.snsBpanull。如何使hql不删除空行?这里是我的HQL要求:

SELECT p FROM Pair p LEFT JOIN FETCH p.batBpa LEFT JOIN FETCH p.snsBpa ORDER BY p.snsBpa.snsId asc 

回答

0

我找到了解决我的问题。问题的关键是,这段代码在休眠

ORDER BY p.snsBpa.snsId 

创建一个跨在MSSQL请求加入的表情,这就是为什么没有行的typeof对,其中p.snsBpa == null。这就是为什么我创建了一个别名:

SELECT p FROM Pair p LEFT JOIN FETCH p.batBpa bat LEFT JOIN FETCH p.snsBpa sns ORDER BY sns.snsId asc 

这个别名创建删除交叉纯SQL请求连接和我得到空,而不是空值的所有行。

0

尝试:

SELECT p FROM Pair p LEFT JOIN FETCH p.batBpa LEFT JOIN FETCH p.snsBpa ORDER BY p.snsBpa.snsId asc NULLS LAST 

编辑

SELECT p FROM Pair p LEFT JOIN FETCH p.batBpa LEFT JOIN FETCH p.snsBpa ORDER BY 
CASE WHEN p.snsBpa.snsId IS NULL THEN 1 ELSE 0 END, 
    p.snsBpa.snsId ASC 
+0

我试着添加NULLS LAST,但它没有工作 – SergeBud 2014-09-01 16:05:49

+0

你可以试试我编辑的答案,看看它是否有帮助 – user3487063 2014-09-01 16:15:58