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
我想翻译原生的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