Hibernate 2和MSSQL for ORDER BY

时间:2015-07-21 09:08:28

标签: java sql-server hibernate

我一直在使用Oracle和Postgre,最近转向了MS SQL 2012。 我在我的应用程序中使用了hibernate,无论我在哪里使用Order by Criteria:

(criteria.addOrder(Order.asc("applicationId"))); 

导致错误说:

  

聚合函数不起作用。

一旦我评论该行,我的程序就可以工作,并且可以检索数据。

我正在使用Hibernate 3。

有没有办法通过hibernate命令它没有这个错误?

编辑..

这是我遇到的一个错误,

  

ORDER BY子句中的“SKY.tcrent.RENTNO”列无效,因为   它不包含在聚合函数或GROUP BY中   子句。

编辑2 ..

我的查询

  Query tcSchaduleQ = getSession().createQuery("SELECT SUM(tcs.dueAmount) FROM TrialCalculationSchedule tcs WHERE tcs.facilityId=:facilityId AND tcs.rentalNumber>:rentalNumber AND tcs.dueDate>:dueDate AND dueTypeId IN(:dueTypeId) ORDER BY tcs.rentalNumber ").setInteger("rentalNumber", facility.getPeriod() - noOfprePayments).setInteger("facilityId",facility.getFacilityId()).setDate("dueDate", date).setParameterList("dueTypeId", plist);

  Number tcsAmt = (Number) tcSchaduleQ.uniqueResult();

这就是hibernate在HQL中生成的内容

SELECT
    SUM(tcs.dueAmount) 
FROM
    TrialCalculationSchedule tcs 
WHERE
    tcs.facilityId=:facilityId 
    AND tcs.rentalNumber>:rentalNumber 
    AND tcs.dueDate>:dueDate 
    AND dueTypeId IN(
        :dueTypeId
    ) 
ORDER BY
    tcs.rentalNumber

这是SQL

select
        SUM(trialcalcu0_.DUEAMT) as col_0_0_ 
    from
        SKYBANKSLFHP.tcrent trialcalcu0_ 
    where
        trialcalcu0_.FACID=? 
        and trialcalcu0_.RENTNO>? 
        and trialcalcu0_.DUEDATE>? 
        and (
            trialcalcu0_.DUETYPEID in (
                ? , ?
            )
        ) 
    order by
        trialcalcu0_.RENTNO

1 个答案:

答案 0 :(得分:0)

看起来像混合聚合和非聚合表达式。如果您在AVG()查询中使用任何聚合函数(如Select)与其他非聚合,则必须使用Group By

尝试这样的事情

createQuery("SELECT SUM(tcs.dueAmount) As DueAmount  ...

如果您使用的是Criteria,那么它应该是这样的

  Criteria crit = sess.createCriteria(Insurance.class);
  ProjectionList proList = Projections.projectionList();
  proList.add(Projections.sum("investementAmount"));
  crit.setProjection(proList);
  List sumResult = crit.list();