0

我放弃了为我之前的问题寻找解决方案:Spring data - Order by multiplication of columns因为我找不到任何方法来实现它。

问题是,我正在使用EntityManagerwith CriteriaQuery,并且我正在尝试找到一种方法来放置 ORDER BY 子句,但是将两列相乘。前任。您存储在数据库中的数量和每单位的价格,并且您想按总价(数量 * unitPrice)订购它。

但是当我尝试时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,这意味着他想显示所有 ID,而我的命名查询将显然什么都不返回。当然,我不能在后端对其进行排序,因为记录太多了。

我一直在寻找实现它的东西这么久,但没有找到任何解决方案,我不敢相信这是不可能的。

4

1 回答 1

0

找到实现这一目标的语法:

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

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

于 2019-03-21T13:28:21.040 回答