2010-11-10 2 views
0

Я использую NHibernate в своем веб-приложении и сопоставляется с моей базой данных. У меня есть модель, Somthing так:Custom Fill Collection в 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 для этого, но я не знаю, как это сделать!

Thanks

ответ

2

Стойкие коллекции и сущности представляют текущее состояние; они не могут иметь только часть этого (подумайте об этом: если они это сделают, как изменится 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>(); 
} 
+0

Привет, Диего, спасибо за awser. Ну, это сработает хорошо, и я представил себе что-то вроде этого. Я сделаю это. Но мне любопытно, есть ли способ получить один и тот же запрос hql с компанией? Is Future хороший вариант? Я использую NH 2.1 –

+0

У вас уже есть компания, для чего вам это нужно? Просто добавьте его в DTO после этого. В любом случае, если вы действительно хотите это сделать, просто добавьте 'Company' в список выбора и DTO. –

+0

Я понял! Спасибо Диего ... –