在我的项目中执行此代码时:

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_taskproduct_task_id作为主键
Product_infoproduct_info_id作为主键


product_info_idProduct_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);

08-05 21:10