java - 如何在 QueryDSL 中创建常量数值表达式?

标签 java jpa-2.0 querydsl

我想用 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/

相关文章:

java - 用 Java 实现 Controller 和路由

java - 准备好的语句不适用于 and 运算符

java - 缓冲 REST 响应的方法

java - JPA混合继承策略

java - JPA/Hibernate 连接查询

java - 如何在可嵌入对象上触发 EntityListener

java - Fetch join 导致 N+1 查询或抛出 org.hibernate.QueryException

java - 如何使用 querydsl 动态添加 where 子句?

java - QueryDSL 的 PathBuilder 的 validate() 有什么作用?

java - 在java中检查字符串数组的大小或长度