Как можно получить частичные объекты в NHibernate?

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

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

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

Спасибо.

ИЗМЕНИТЬ:

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


person mark    schedule 18.03.2010    source источник


Ответы (2)


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

Это вернет временные объекты, а не постоянные сущности.

// 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>();
person Lachlan Roche    schedule 18.03.2010
comment
Спасибо за это Лахлан. Также хотел добавить, что вы можете использовать это для сопоставления с другим типом. Я взял объект User со всеми пользовательскими свойствами и использовал преобразователь для создания объекта UserDto, который был радикально упрощен с использованием только имени пользователя, когда все, что мне было нужно, это список имен пользователей для раскрывающегося списка. - person Chris Stavropoulos; 30.04.2010

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

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

person Anton Gogolev    schedule 18.03.2010
comment
Мне нужна возможность извлекать частичные объекты того же типа, что и при извлечении полных объектов. Это означает экземпляры типа O только с полем A, инициализированным из БД. - person mark; 18.03.2010