在Hibernate HQL中使用派生表的子查询

时间:2010-03-12 15:26:49

标签: hql derived

我有一个Hibernate HQL问题。 我想将子查询编写为派生表(出于性能原因)。 是否可以在HQL中执行此操作? 例如:

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

(顺便说一下,这只是一个示例查询,所以不要给出重写它的建议,只是我感兴趣的派生表概念)

2 个答案:

答案 0 :(得分:2)

不幸的是,派生表目前在HQL中不起作用。 例如,以下工作:

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

...以下引发此异常: 抛出了类型'Antlr.Runtime.NoViableAltException'的异常。靠近1号线, 第24栏[从中选择不同的Id(从S2.BP.Model.User u中选择你)]

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

后退将是创建一个包含原始sql的命名查询,或创建一个存储过程并通过命名查询调用它,如下所示:

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

答案 1 :(得分:1)

您可以在我的博客http://blog.eyallupu.com/2009/07/hibernate-derived-properties.html中找到有关派生属性和性能注意事项的一些信息。

希望它会有所帮助,
Eyal Lupu