Как можно получить частичные объекты в NHibernate? - PullRequest
2 голосов
/ 18 марта 2010

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

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

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

Спасибо.

EDIT:

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

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

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

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

// 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 голосов
/ 18 марта 2010

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

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

...