QueryDsl 3.3.4
Hibernate 3.6.10-Final
我有两个实体:

public class Document {
    private Confirmation confirmation;
}

public class Confirmation {
    ...
}

我需要这样的查询:
SELECT count(d.id), CASE WHEN d.confirmation_id IS NULL then 'NOT_CONFIRMED' else 'CONFIRMED' END as confirmed FROM document d GROUP BY confirmed;

因此,应根据上面的case表达式的结果将其分组。
现在,要将案例部分转换为querydsl:
StringExpression confirmExp = new CaseBuilder()
    .when(Expressions.booleanTemplate("confirmation_id is null"))
    .then(Expressions.stringTemplate("NOT_CONFIRMED"))
    .otherwise(Expressions.stringTemplate("CONFIRMED"));

我正在使用.when(Expressions.booleanTemplate("confirmation_id is null"))以避免加入confirmation表。
使用这样的表达式运行查询,我在下面遇到异常。
这是另一个 hibernate 错误还是这种情况需要有所不同?

最佳答案

如果要在查询中使用字符串文字,则需要将其写为

StringExpression confirmExp = new CaseBuilder()
    .when(Expressions.booleanTemplate("confirmation_id is null"))
    .then(Expressions.stringTemplate("'NOT_CONFIRMED'"))
    .otherwise(Expressions.stringTemplate("'CONFIRMED'"));

Expressions.stringTemplate并不意味着该参数已序列化为String文字,但是创建的表达式的类型为java.lang.String。

09-25 21:28