2010-03-12 59 views
5

我有一个Hibernate HQL问题。 我想写一个子查询作为派生表(出于性能原因)。 在HQL中可以这样做吗? 例子:在Hibernate中使用派生表的子查询HQL

FROM Customer WHERE country.id in 
(SELECT id FROM (SELECT id FROM Country where type='GREEN') derivedTable) 

(顺便说一句,这只是一个简单的查询,所以不要重写它给意见,只是派生表的概念我很感兴趣)

回答

2

不幸的是没有,派生表目前不在HQL中工作。 例如,下面的工作:

List<int> result = 
    nHSession.CreateQuery(@"select distinct Id from User u") 
    .List<int>().ToList(); 

...以下抛出此异常: 类型的异常 'Antlr.Runtime.NoViableAltException' 被抛出。近线1, 柱24

List<int> result = nHSession.CreateQuery(
    @"select distinct Id from (select u from User u)") 
    .List<int>().ToList(); 

的回落将创建包含原始SQL或命名查询[从选择不同ID(来自S2.BP.Model.User U选择U)]创建一个存储过程,并通过命名查询调用它,就像这样:

List<int> result = nHSession.GetNamedQuery("spUserIds") 
    .SetInt32("id", 3) 
    .List<int>().ToList();