首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QueryDSL的值对象(VOs)的数学操作

使用QueryDSL的值对象(VOs)的数学操作
EN

Stack Overflow用户
提问于 2014-11-12 18:08:07
回答 1查看 954关注 0票数 1

我试图利用QueryDSL功能来执行一些操作,而我仍然在创建一个包含来自数据库的信息的特定DTO列表,这样我就可以避免以后的杂乱操作。下面的例子是我试图实现的目标的一个愚蠢的表述:

代码语言:javascript
复制
public class Product {
   private Quantity total;

   //more code here
}

public class Quantity {
   //code here
   public Quantity multiply(Quantity quantity) {
      return Quantity.of(this.value.multiply(quantity.numberValue());
   }
   //more code here
}



public static Function<JPQLQuery, List<MyDTO>> someMethod() {
   return q -> {

       //some code here

       q.from(...)

       //more code here

       .list(new QMyDTO(qProduct.total.multiply(qProduct.total).sum()));
   };
}

问题是,QueryDSL使用一个NumberExpression来提供一些操作,比如求和、乘等,这些操作在BigDecimal这样的类型中工作得很好,但是不能处理自定义类型,比如my对象Quantity。我试着想出一些办法,但我没有取得任何成功,也没有在那里找到任何类似的东西。

有什么措施可以帮助我做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-16 19:23:45

您可以为这种情况创建委托方法。

代码语言:javascript
复制
@QueryDelegate(Quantity.class)
public static Expression<Quantity> multiply(QQuantity quantity, Quantity other){
    return Expressions.operation(Quantity.class,
        Ops.MULTI, quantity, ConstantImpl.create(other));
}

在那之后你就可以快递了

代码语言:javascript
复制
qProduct.total.multiply(qProduct.total)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26893598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档