Проекция NHibernate с использованием SqlQuery

Я пытаюсь воспроизвести стиль HqlQuery «выберите новую функциональность ObjectToProjectOut». т.е. взять список столбцов, возвращаемых из запроса, и вернуть как список типов ObjectToProjectOut, экземпляры которых создаются с помощью конструктора с таким же количеством параметров, как столбцы в запросе.

По сути, это то, что «выберите новый ObjectToProjectOut» в Hql ... но, очевидно, это недоступно в SqlQuery. Я думаю, мне нужно установить преобразование результата и использовать PassThroughResultTransformer, DistinctRootEntityResultTransformer и т. Д., Чтобы заставить его работать.

Кто-нибудь знает, что мне следует использовать?


person penderi    schedule 04.02.2010    source источник


Ответы (2)


хорошо .... после просмотра кода NHibernate кажется, что я искал _1 _.... конечно же!

Однако, возможно, я обнаружил ошибку nHibernate. Если у вас есть одно и то же имя столбца, возвращенное дважды из двух разных таблиц (например, market.name и account.name), то к тому времени, когда nHibernate вернет массив из db в преобразователь, первое появление 'Name' будет использоваться для оба. Противный.

Обойтись без уникального псевдонима. С Hql сгенерированный sql сильно псевдоним, так что это только ошибка SqlQuery.

Grrrr. Сегодня должен быть мой день, также нашел еще один nHibernate ошибка / проблема, которую я опубликовал в StackOverflow для комментариев.

person penderi    schedule 04.02.2010

Вы можете использовать метод AddEntity для заполнения сущностей из SQL-запроса.

Вот два примера из документации NHibernate. :

sess.CreateSQLQuery("SELECT * FROM CATS")
    .AddEntity(typeof(Cat));

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));
person Erik Öjebo    schedule 04.02.2010
comment
Нет, извините, это не сущности, это проекции. - person penderi; 04.02.2010