2010-03-18 3 views
2

У меня есть объект O с 2 полями - A и B. Как я могу извлечь O из базы данных, чтобы получить только поле A?Как получить частичные объекты в NHibernate?

Конечно, у моего реального приложения есть объекты со многими полями, но двух полей достаточно, чтобы понять принципала.

Я использую NHibernate 2.1.

Спасибо.

EDIT:

Я хотел бы уточнить. Мне нужно получить объекты типа O. Иногда мне нужно получить полные объекты - это означает, что оба поля A и B задаются из значений базы данных. Но в других случаях я хотел бы получить объекты O только с заданным полем A из значений базы данных.

ответ

0

HQL имеет конструкцию select new, которая позволяет получать только подмножество полей. Однако возвращенные объекты не могут быть сохранены обратно в БД.

В качестве альтернативы вы можете создавать дополнительные классы с ограниченным набором свойств, сопоставляя их с таблицей, о которой идет речь.

+0

Мне нужна возможность извлечения частичных объектов того же типа, что и при извлечении полных объектов. Значение экземпляров типа O только с полем A, инициализированным из DB. – mark

3

Используйте проекцию, чтобы сузить результирующий набор до нужного столбца (ов) и трансформатора результата, чтобы преобразовать результат в нужный тип.

Это приведет к появлению переходных объектов, а не постоянных объектов.

// select some User objects with only the Username property set 
var u = session.CreateCriteria<User>() 
    .SetProjection(Projections.ProjectionList().Add(Projections.Property("Username"), "Username") ) 
    .SetResultTransformer(Transformers.AliasToBean<User>()) 
    .List<User>(); 
+0

Спасибо за это Lachlan. Также хотелось добавить, что вы можете использовать его для отображения другого типа. Я взял объект User со всеми его свойствами и использовал трансформатор для создания объекта UserDto, который был значительно упрощен с использованием только имени пользователя для использования, когда все, что мне было нужно, это список имен пользователей для раскрывающегося списка. –