在我的项目中执行此代码时:
Integer countObj = (Integer) ht.findByCriteria(criteria.setProjection(Projections.rowCount())).get(0);
我得到以下异常:
com.microsoft.sqlserver.jdbc.SQLServerException:ORDER BY子句中的“ PRODUCT_TASK.PRODUCT_TASK_ID”列无效,因为它不包含在聚合函数或GROUP BY子句中。
在这里,我使用两个表。
Product_task
以product_task_id
作为主键Product_info
以product_info_id
作为主键product_info_id
是Product_task
的外键。通过执行该查询,我将获得计数。
我在日志中收到此SQL查询:
select count(*) as Count from PRODUCT_TASK pt inner join
PRODUCT_INFO pin on pt.PRODUCT_INFO_ID=pin.PRODUCT_INFO_ID
where pin.UPC like ? order by pt.PRODUCT_TASK_ID asc**
我知道如何更改SQL查询(group by子句必须存在),但是我不知道如何修改Hibernate查询以获得结果。
最佳答案
您只需要在Criteria
中使用Projections's .groupProperty() method。
groupProperty
public static PropertyProjection groupProperty(String propertyName)
分组属性值
您的代码将如下所示:
Integer countObj = (Integer) ht.findByCriteria(criteria.setProjection(Projections.rowCount()
.add(Projections.groupProperty("product_task_id"))))
.get(0);