2010-08-30 3 views
2

Я пишу запрос HQL, в виде:Повторные дополнительные данные HQL

from a where ... or exists (from b inner join b.c where ...) and ... 

я вернусь объект типа a из этого запроса. Тем не менее, мне также нужно знать, вернулась ли ссылка exists или не позже в моем коде. Если бы это был SQL, я бы привязал его к списку выбора. Тем не менее, даже если добавить к избранной статье HQL, так что она становится:

select a, exists (from b inner join b.c where ...) as x from a where ... or x and ... 

В моем коде теперь я должен выбирать между просмотром нетипизированных данных или просмотром типизированных объектов типа a и выбрасывая свое значение x который вернулся с ним.

Есть ли способ как-то вернуться набранные данные plus дополнительная колонка?

ответ

3

У вас есть два варианта здесь, как я вижу это:

1) Добавьте дополнительное свойство в качестве предназначенного только для чтения отображенной собственности вашей организации, что делает использование formula отображения для получения значения с помощью встроенного SQL или ее UDF.

2) Получить только данные, которые вы потребность обратно, используя пользовательский запрос HQL и использовать aliastobeanresulttransformer проецировать на сильно типизированных DTO, который включает в себя ваши поля, представляющие интерес.

Какой маршрут вы идете, действительно зависит от вас, но я склоняюсь к варианту № 2, чтобы не загрязнять вашу модель домена ненужными полями.

+0

Я отправился на маршрут «aliastobeanresulttransformer». Однако для сопоставления одного из столбцов мне нужно использовать тип пользователя (IUserType). Есть ли способ сделать это? –

+0

Он должен работать без проблем; просто выберите свойство, зависящее от IUserType, используя hql; он должен обрабатываться так, как если бы вы выбирали обычный объект. – DanP

+1

* aliastobeanresulttransformer *! Хотелось бы, чтобы мы могли сорвать некоторые из этих сумасшедших терминов в nhibernate. – UpTheCreek

Смежные вопросы