我想用 QueryDSL 创建这样的查询
update WorkMessage w set w.totalPrice = 0.12 - w.totalCost;
我试过这样
Expression<Float> priceExpr = Expressions.constant(0.12f);
new JPAUpdateClause(em, w)
.set(w.totalPrice , priceExpr.subtract(w.totalCost));
但这不起作用 - 表达式没有减法。
我是这样做的:
new JPAUpdateClause(em, w)
.set(w.totalPrice , w.totalCost.subtract(0.12f).negate());
但我想知道如何以第一种方式做到这一点。
//编辑
第二种方法不行:
JPAUpdateClause.toString 说:
update WorkMessage workMessage
set workMessage.totalPrice = -(workMessage.totalCost - :a1)
但是SQL结果是
update work_message set total_price=-total_cost-?
括号消失了。难道我做错了什么?它看起来像这些:
w.totalCost.subtract(0.12f).negate()
w.totalCost.negate().subtract(0.12f)
结果相同
针对上面的问题
w.totalCost.negate().add(0.12f)
有效。但我认为有一个错误。
最佳答案
我们之前从 Querydsl 中删除了 DSL 常量类型。如果你真的想用第一种方式写,那么你必须这样表达:
Expressions.operation(Float.class, Ops.SUB,
Expressions.constant(0.12f), w.totalCost)
或
NumberOperation.create(Float.class, Ops.SUB,
Expressions.constant(0.12f), w.totalCost)
如果你需要一个数字表达式
关于java - 如何在 QueryDSL 中创建常量数值表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661770/