QueryDSL 条件排序依据

QueryDSL conditional order by

我想翻译原生的sql例如:

ORDER BY (currency = 'EUR') DESC, money DESC

进入查询 dsl:

.orderBy((qItem.currency.eq("EUR")).desc(), qItem.money.desc());

然而它抛出:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: = near line 4, column 31
...
order by qItem.currency = ?1 desc]

我错过了什么?

编辑: 回答(java)

NumberExpression<Integer> currency = new CaseBuilder().when(qItem.currency.eq("EUR"))
            .then(1)
            .otherwise(2);

query.orderBy(currency.asc(), qItem.money.desc());

尝试使用 CASE 代替:

ORDER BY (CASE WHEN currency = 'EUR' THEN 1 ELSE 2 END) DESC,
         money DESC