QueryDSL CaseBuilder 不适用于 java.util.Date

问题描述

当我这样做时,我收到错误 java.lang.IllegalArgumentException: Unsupported constant Mon Mar 01 00:00:00 GMT 2021

DateTimeExpression<Date> startOfMonth = new CaseBuilder()
            .when(order.dueDate.lt(day))
            .then(new Date())
            .otherwise(new Date());

看起来像这样一个简单的查询。我不明白出了什么问题。

我使用的是 QueryDSL 3.6、Hibernate 5.1 和 Postgres 10。

解决方法

问题是 JPQL/HQL 不允许在 CASE WHEN 表达式中使用参数。您必须用文字替换常量。类似于以下内容:

.when(order.dueDate.lt(Expressions.templateExpression(Date.class,"'2021-01-01 00:00:00'"))

“THEN”和“ELSE”表达式中的常量应该没问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...