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

Vla*_*mir 5 hql derived

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

FROM Customer WHERE country.id in 
(SELECT id FROM (SELECT id FROM Country where type='GREEN') derivedTable)
Run Code Online (Sandbox Code Playgroud)

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

Tah*_*aza 3

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

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

...以下抛出此异常: 抛出了“Antlr.Runtime.NoViableAltException”类型的异常。靠近第 1 行,第 24 列 [select different Id from (select u from S2.BP.Model.User u)]

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

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

List<int> result = nHSession.GetNamedQuery("spUserIds")
    .SetInt32("id", 3)
    .List<int>().ToList();
Run Code Online (Sandbox Code Playgroud)