首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MSSQL的Hibernate 2命令

使用MSSQL的Hibernate 2命令
EN

Stack Overflow用户
提问于 2015-07-21 09:08:27
回答 1查看 304关注 0票数 0

我一直在与Oracle和Postgre合作,最近转而使用MS 2012。我在我的应用程序中使用hibernate,只要我按照标准使用了顺序:

代码语言:javascript
复制
(criteria.addOrder(Order.asc("applicationId"))); 

它会导致一个错误:

聚合函数不起作用。

一旦我评论了这一行,我的程序就能工作,数据就可以检索了。

我在用Hibernate 3。

有没有办法在没有此错误的情况下通过hibernate对其进行排序?

编辑.。

这是我犯的一个错误,

列"SKY.tcrent.RENTNO“在ORDER子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP子句中。

编辑2..

我的疑问

代码语言:javascript
复制
  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中生成的内容。

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-07-21 09:21:25

看起来像将聚合表达式和非聚合表达式混合在一起,.If,您使用的是任何聚合函数,比如Select查询中的AVG()和其他非聚合表达式,那么您必须使用Group By

试试像这样的东西

代码语言:javascript
复制
createQuery("SELECT SUM(tcs.dueAmount) As DueAmount  ...

如果您使用的是标准,那么应该是这样的

代码语言:javascript
复制
  Criteria crit = sess.createCriteria(Insurance.class);
  ProjectionList proList = Projections.projectionList();
  proList.add(Projections.sum("investementAmount"));
  crit.setProjection(proList);
  List sumResult = crit.list();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31534802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档