Java QueryDSL order by关系为空
我试图对querydsl查询进行排序,以便首先对关系中所有具有空值的实体进行排序,但我不知道如何进行排序 我希望:Java QueryDSL order by关系为空,java,hibernate,jpa,querydsl,Java,Hibernate,Jpa,Querydsl,我试图对querydsl查询进行排序,以便首先对关系中所有具有空值的实体进行排序,但我不知道如何进行排序 我希望: query.orderBy( QBook.book.original.isNull().asc() ) 要成为我所需要的,其中original是与Book的自我参照关系 但这产生了一个例外: Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: is null [select
query.orderBy(
QBook.book.original.isNull().asc()
)
要成为我所需要的,其中original
是与Book
的自我参照关系
但这产生了一个例外:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: is null
[select book
from com.mydomain.Book book
order by book.original is null asc]
(真正的例外情况要长得多,但这应该是所有相关信息。)
我也试过了
QBook.book.original.name.asc().nullsFirst()
但这有两个问题。首先,它消除了所有没有原件的书籍,即使没有,它也会根据名称对它们进行排序,而我只想根据该值是否为空对它们进行排序
Hibernate版本:3.6.6.Final
QueryDSL版本:3.2.3由于没有更好的解决方案,我计划添加一个布尔值,指示original
是否为空。该值可以按照我想要的方式轻松排序。您可以使用CaseBuilder:
query.orderBy(new CaseBuilder()
.when(QBook.book.original.isNull())
.then(0)
.otherwise(1)
.asc()
)
多亏了查询dsl 3.3.0或更高版本QBook.book.original.name.asc().nullsFirst()
,由于左连接,它看起来至少会包含空值。您是否尝试过使用较新版本的Querydsl?现在尝试升级Querydsl是不切实际的,但希望我们能在不久的将来升级它。