group by子句的jdbc.SQLServerException

时间:2017-05-18 08:00:24

标签: java sql sql-server hibernate criteria

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<tr height="50">
  <td style="width: 220px">
    <label for="assetGroup">
      <span style="color:red">*</span>Asset Group:
    </label>
  </td>
  <td>
    <select id="assetgroupSelect" name ='assetgroupSelect'>
      <option value="">(choose asset group)</option>
     
      <option value="A"> A </option>
     <option value="B"> B </option>
     <option value="C"> C </option>
     <option value="G"> G </option>
     <option value="H"> H </option>
     <option value="I"> I </option>
     
    </select><br><br>
    <div class="placer"> 
      Current index is :
      <div id="idValue"></div>
    </div>
  </td>
</tr>

我得到以下异常:

  

com.microsoft.sqlserver.jdbc.SQLServerException:“PRODUCT_TASK.PRODUCT_TASK_ID”列在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。“

我在这里使用两张桌子。

    {li> Integer countObj = (Integer) ht.findByCriteria(criteria.setProjection(Projections.rowCount())).get(0); Product_task为主键 {li> product_task_idProduct_info为主键

product_info_idproduct_info_id的外键。

通过执行该查询,我将得到计数。

我在日志中收到了这个SQL查询:

Product_task

我知道如何更改SQL查询(group by子句需要在那里)但我不知道如何修改Hibernate查询以获得结果。

1 个答案:

答案 0 :(得分:0)

您只需在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);