日期:2014-05-19  浏览次数:20878 次

为什么Hibetnate中用CreateSQLQuery查询sql还是报错?
SQL code
hql = "select  DISTINCT P.*  from Account P 
inner join [Order] o on P.Id = o.AccountId 
right join (select od.orderID,o1.AccountId from [Order] o1 
inner join OrderDetail od on o1.id = od.orderid 
group by o1.AccountId,od.orderid having count(*) >=2) T 
on P.Id = T.AccountId   where  P.AreaId 
In(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) 
and P.Deleted='False' order by P.CreatedOn ";


C# code
list = session
                    .CreateSQLQuery(hql)
                    .SetFirstResult(skipCount)
                    .SetMaxResults(pageSize + skipCount)
                    .List<T>()
                    .Take(pageSize);


------解决方案--------------------
它报了
Message=关键字 'DISTINCT' 附近有语法错误。
'T' 附近有语法错误。

就说明很可能是sql本身的语法错误

试试先用最简单的sql语句来确认一下
------解决方案--------------------
T是干嘛的
------解决方案--------------------
探讨

T是干嘛的

------解决方案--------------------
查一下sql本身是否有问题,拿出来在查询分析器下执行测试一下.

另外.SetFirstResult(skipCount).SetMaxResults(pageSize + skipCount)

skipCount,pageSize + skipCount 是整型的不?
------解决方案--------------------
CreateSQLQuery 执行的是SQL语句不是HQL语句 可是你写语法是HQL语法 当然会错