我放弃了为我之前的问题寻找解决方案:Spring data - Order by multiplication of columns因为我找不到任何方法来实现它。
问题是,我正在使用EntityManager
with 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,而我的命名查询将显然什么都不返回。当然,我不能在后端对其进行排序,因为记录太多了。
我一直在寻找实现它的东西这么久,但没有找到任何解决方案,我不敢相信这是不可能的。