我一直在与Oracle和Postgre合作,最近转而使用MS 2012。我在我的应用程序中使用hibernate,只要我按照标准使用了顺序:
(criteria.addOrder(Order.asc("applicationId"))); 它会导致一个错误:
聚合函数不起作用。
一旦我评论了这一行,我的程序就能工作,数据就可以检索了。
我在用Hibernate 3。
有没有办法在没有此错误的情况下通过hibernate对其进行排序?
编辑.。
这是我犯的一个错误,
列"SKY.tcrent.RENTNO“在ORDER子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP子句中。
编辑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发布于 2015-07-21 09:21:25
看起来像将聚合表达式和非聚合表达式混合在一起,.If,您使用的是任何聚合函数,比如Select查询中的AVG()和其他非聚合表达式,那么您必须使用Group By。
试试像这样的东西
createQuery("SELECT SUM(tcs.dueAmount) As DueAmount ...如果您使用的是标准,那么应该是这样的
Criteria crit = sess.createCriteria(Insurance.class);
ProjectionList proList = Projections.projectionList();
proList.add(Projections.sum("investementAmount"));
crit.setProjection(proList);
List sumResult = crit.list();https://stackoverflow.com/questions/31534802
复制相似问题