Mysql HQL查询的简单困难

Mysql HQL查询的简单困难,mysql,hibernate,hql,Mysql,Hibernate,Hql,执行HQL查询时遇到如下问题: select new myPackage.view.CoverDocumentReportView(Re.code AS fulCd, Re.creditPrice AS crtprc, Re.debitPrice AS dbtprc, (Re.debitPrice - Re.debitPrice) AS redbtprc, (Re.creditPrice- Re.creditPrice) AS recrtprc, (Re.debitPrice-Re.credi

执行HQL查询时遇到如下问题:

select new myPackage.view.CoverDocumentReportView(Re.code AS fulCd,
Re.creditPrice AS crtprc,
Re.debitPrice  AS dbtprc,
(Re.debitPrice - Re.debitPrice) AS redbtprc,
(Re.creditPrice- Re.creditPrice) AS recrtprc,
(Re.debitPrice-Re.creditPrice)   AS rem) 
from 
(select  fullCode as code, 
     sum(creditPrice) as creditPrice ,
     sum(debitPrice)  as debitPrice   
from    DocumentMaster DM,
     DocumentAccount   DA,
     Tree              T ,
     AccountTree       AT, 
     DocumentDetailed  DD 
where DM.id =  DA.documentMaster  and  
      DA.accountTree =  T.id      and   
      DA.accountTree =  AT.id     and   
      DD.documentAccount =  DA.id 
group by  DA.accountTree ) As Re

1) 如果我这样执行:

SQLQuery crit = (SQLQuery) session
            .createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(CoverDocumentReportView.class));
ArrayList<CoverDocumentReportView> li =  (ArrayList<CoverDocumentReportView>) crit.list();
sqlquerycrit=(SQLQuery)会话
.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(CoverDocumentReportView.class));
ArrayList li=(ArrayList)crit.list();
错误2012-12-22 14:16:19838[http-8080-1]org.hibernate.util.jdbceptionReporter:您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解使用接近“.datx.web.accounting.view.CoverDocumentReportView(Re.code AS fulCd, 关于第1行的creditP'


2) 如果我用这个执行它:

Query query = session.createQuery(sql).setResultTransformer(Transformers.aliasToBean(CoverDocumentReportView.class));
ArrayList<CoverDocumentReportView> li =  (ArrayList<CoverDocumentReportView>)query.list();
Query Query=session.createQuery(sql).setResultTransformer(Transformers.aliasToBean(CoverDocumentReportView.class));
ArrayList li=(ArrayList)query.list();
错误将是:

错误2012-12-22 14:51:46709[http-8080-1]org.hibernate.hql.ast.ErrorCounter:第1行:224:意外令牌:( 错误2012-12-22 14:51:46709[http-8080-1]org.hibernate.hql.ast.ErrorCounter:第1行:308:意外令牌:总和


问题出在哪里?

SQL和HQL是两种不同的语言

HQL不支持from子句中的子查询,因此此查询不能是HQL查询

SQL不知道Java对象,也没有任何允许创建它们的
new()
函数,因此该查询也不是有效的SQL查询


使其成为有效的SQL查询,使用
createSQLQuery()执行它
,然后遍历结果并从返回的行中创建对象的实例。或者在执行此操作时使用结果转换器,这将为您做到这一点。结果转换器将使用您分配给SQL查询返回列的别名为您创建bean。您不需要任何
新的CoverDocumentReportView()
在查询中实现该功能。有关详细信息,请阅读javadoc。

您可能希望在此处看到,顺便说一句,区分大小写不是问题所在。感谢您的帮助。但是,将其更改为SQL在此处不是一个选项。如何使其与HQL一起工作?HQL似乎支持子查询。我将进行任何必要的更改。:注意HQL子查询只能出现在select或where子句中。我明白了,但是有没有办法将我想要的SQL语句安全地转换为HQL?一个链接或提示就足够了。请注意,HQL子查询只能出现在select或where子句中。这意味着您不能在
from
子句中有子查询。因此,不,此查询无法翻译d到HQL,因为
from
子句不是
select
子句,也不是
where
子句。我看不出它怎么会更清楚。相信我:我明白了:-)你不必每次都重复它。我想我最好考虑一下
如何编写这个不带from子句的sql,使其能够转换为hql