Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QueryDSL order by关系为空_Java_Hibernate_Jpa_Querydsl - Fatal编程技术网

Java QueryDSL order by关系为空

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

我试图对querydsl查询进行排序,以便首先对关系中所有具有空值的实体进行排序,但我不知道如何进行排序

我希望:

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是不切实际的,但希望我们能在不久的将来升级它。