Коллекция пользовательских заливок в NHibernate - PullRequest
0 голосов
/ 10 ноября 2010

Я использую NHibernate в своем веб-приложении, и он сопоставлен с моей базой данных.У меня есть модель, что-то вроде этого:

public class Company {
   public virtual string Name { get; set; }
   public virtual IList<Employee> Employeers { get; set; }
}

public class Employee {
   public virtual string Name { get; set; }
   public virtual DateTime Birthday { get; set; }
   /* other properties */
   public virtual Company Company { get; set; }
}

PS: это не настоящая модель, но она работает для моих образцов / сомнений ...

Я использую HQL для получения своих объектови я хотел бы знать, если есть какой-либо способ:

1) Получить объект компании и заполнить коллекцию сотрудников 10 лучших сотрудников, упорядоченных по дням рождения?

2) Есть ли способ, когда коллекция заполнена, заполнить только некоторые поля, такие как Имя и День рождения?У меня есть много свойств, которые я не буду использовать в моем представлении.Я могу создать DTO для этого, но я не знаю, как это сделать!

Спасибо

1 Ответ

2 голосов
/ 10 ноября 2010

Постоянные коллекции и сущности представляют текущее состояние;у них не может быть только части этого (подумайте об этом: если бы они сделали, как бы NH отслеживал изменения?)

Итак, в обоих случаях ответом являются запросы и DTO.Вы можете легко получить нужные данные с помощью HQL:

class EmployeeNameAndBirthDay
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}

public IList<EmployeeNameAndBirthDay> GetTopEmployees(Company company)
{
    return session.CreateQuery(@"
                   select Name as Name,
                          Birthday as Birthday
                   from   Employee
                   where  Company = :company
                   order by Birthday desc
                   ")
                  .SetParameter("company", company)
                  .SetMaxResults(10)
                  .SetResultTransformer(
                      Transformers.AliasToBean<EmployeeNameAndBirthDay>())
                  .List<EmployeeNameAndBirthDay>();
}
...