NHibernate: возвращает константу в HQL - PullRequest
1 голос
/ 09 апреля 2009

Мне нужно вернуть константу из запроса HQL в NHIbernate

SELECT new NDI.SomeQueryItem(user, account, " + someNumber + ") 
FROM NDI.SomeObject object

Я пытаюсь что-то вроде выше. Я пробовал это:

SELECT new NDI.SomeQueryItem(user, account, :someNumber) 
FROM NDI.SomeObject object

А потом позже:

.SetParameter("someNumber", 1).List<SomeQueryItem>();

Но в первом случае я получаю «Неопределенный псевдоним или неизвестное отображение 1». Это имеет какой-то смысл, так как, вероятно, думает, что 1 - псевдоним.

Для второго я получаю «Неопределенный псевдоним или неизвестное отображение: someNumber», который снова имеет некоторый смысл, если он никогда не устанавливает параметр.

Я должен верить, что есть какой-то способ сделать это.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2009

Пожалуйста, продолжайте верить, что есть какой-то способ сделать это - но с HQL его нет!

С чего бы вы все равно захотели? Если вы хотите обновить значение этого свойства до указанного вами значения, сделайте это после загрузки объектов. В качестве альтернативы, если ваш набор результатов не совсем соответствует вашим объектам, вы всегда можете использовать SQL-запрос (который вы все еще можете сделать через сеанс NHibernate). Но цель NHibernate состоит в том, чтобы отобразить то, что находится в вашей базе данных, на объекты, поэтому указание ручного переопределения, подобного этому, совершенно справедливо недопустимо.

1 голос
/ 09 апреля 2009

Звучит так, как будто есть (маленький?) Разрыв между объектами вашего домена и моделью вашей базы данных. Как насчет создания небольшого объекта "DTO", чтобы преодолеть этот разрыв?

Пусть ваш запрос вернет список SomeQueryItemDTO (или как вы хотите его называть), который, как вы знаете, из-за именования не является истинной частью вашего домена. Затем есть некоторая функция для обработки списка и построения списка истинных объектов SomeQueryItem путем включения данных, которые являются посторонними для базы данных.

Если вы уже используете шаблон репозитория, это должно быть проще, так как все ужасные детали скрыты внутри вашего репозитория.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...