【发布时间】:2015-07-21 09:08:27
【问题描述】:
我一直在使用 Oracle 和 Postgre,最近切换到 MS SQL 2012。 我在我的应用程序中以及在任何地方使用了按标准排序的地方都使用了休眠:
(criteria.addOrder(Order.asc("applicationId")));
它会导致错误提示:
聚合函数不起作用。
一旦我评论说我的程序工作正常并且可以检索数据。
我正在使用 Hibernate 3。
有没有什么方法可以通过hibernate订购它而不会出现这个错误?
编辑..
这是我遇到的一个错误,
“SKY.tcrent.RENTNO”列在 ORDER BY 子句中无效,因为 它不包含在聚合函数或 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
【问题讨论】:
-
你能发布更多的源代码吗? ORDER BY 本身不是聚合函数(SUM、COUNT 等是)。
-
投票否决,因为您所要求的(关于标准 API)与您的代码 (HQL) 不匹配,还声称正在发生两个不同的错误消息。
标签: java sql-server hibernate