Подзапрос с помощью полученной таблицы в В спящем режиме HQL

У меня есть Быть в спящем режиме вопроса о HQL. Я хотел бы записать подзапрос как полученную таблицу (по причинам производительности). Действительно ли возможно сделать это в HQL? Пример:

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

(btw, это - просто демонстрационный запрос, так не давайте совет относительно перезаписи его, просто полученное понятие таблицы, я интересуюсь),

5
задан Brian Tompsett - 汤莱恩 25 May 2017 в 22:36
поделиться

2 ответа

К сожалению, нет, производные таблицы в настоящее время не работают в HQL. Например, работает следующее:

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

... следующее вызывает это исключение: Возникло исключение типа Antlr.Runtime.NoViableAltException. рядом со строкой 1, столбец 24 [выберите отдельный идентификатор из (выберите u из 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();
2
ответ дан 15 December 2019 в 06:23
поделиться

Вы можете найти некоторую информацию о производных свойствах и соображениях производительности в моем блоге в http://blog.eyallupu.com/2009/07/hibernate-dehibited-properties.html

Надеюсь, это поможет,
Эял Лупу

1
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: