JPA与CriteriaQuery和ORDER BY值相乘

时间:2019-03-15 12:51:50

标签: jpa spring-data-jpa entitymanager hibernate-criteria javax.persistence

我放弃了寻找上一个问题的解决方案:Spring data - Order by multiplication of columns,因为我找不到任何方法可以解决该问题。

问题是,我在EntityManager中使用CriteriaQuery,并且试图找到一种放置ORDER BY子句的方法,但是要乘以两列。 例如您以DB的形式存储商品的数量和每单位价格,并想按总价格(金额*单价)进行订购。

但是当我尝试cq.orderBy(cb.asc(r.get("amount * unitPrice")));时,即使两个属性都在我的DTO中,我也总是得到java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [amount * unitPrice]。显然,我知道为什么会收到该异常,但找不到任何解决方法来运行这样的查询。

我无法使用命名查询,因为我的查询采用了我动态应用的过滤器->我无法放置“ where id in ()”,因为用户无法选择任何ID,这意味着他想显示所有这些和我的命名查询都不会明显返回任何内容。当然,由于记录太多,我无法在后端对其进行排序。

很久以来,我一直在寻找能够实现目标的东西,但没有找到任何解决方案,而且我不敢相信这是不可能的。

1 个答案:

答案 0 :(得分:0)

找到实现该目的的语法

cq.orderBy(cb.asc(cb.prod(r.get("amount"), r.get("unitPrice"))));

其中cq是CriteriaQuery,cb是CriteriaBuilder,r是Root