我一直在使用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
答案 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();