2010-11-10 3 views
0

J'utilise NHibernate dans mon application web et elle est mappée avec ma base de données. J'ai un modèle, somthing comme ceci:Collection de remplissage personnalisée dans 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: ce n'est pas vrai modèle, mais il fonctionne pour mes échantillons/doutes ...

J'utilise HQL pour obtenir mes objets et je voulez savoir s'il y a un moyen de:

1) Obtenez un objet de la société et remplissez la Colletion des Employeurs avec les 10 meilleurs Employés classés par Birth Desc.

2) Existe-t-il un moyen, lorsque la collection est remplie, de la remplir avec seulement quelques champs comme Nom et Anniversaire? J'ai beaucoup de propriétés que je n'utiliserai pas à mon avis. Je peux créer un DTO pour cela mais je ne sais pas comment faire!

Merci

Répondre

2

Les collections et entités permanentes représentent l'état actuel; ils ne peuvent pas avoir une partie de cela (pensez-y: s'ils le faisaient, comment NH suivrait-il les changements?)

Ainsi, dans les deux cas, la réponse est les requêtes et les DTO. Vous pouvez facilement récupérer les données dont vous avez besoin avec 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

Salut Diego, Merci pour awser. Eh bien, ça marchera bien et j'ai imaginé quelque chose comme ça. Je vais le faire. Mais je suis curieux, Y at-il un moyen d'obtenir la même requête hql avec l'entreprise? Future est une bonne option? J'utilise NH 2.1 –

+0

Vous avez déjà l'entreprise, qu'est-ce que vous en avez besoin? Il suffit de l'ajouter aux DTO après. Quoi qu'il en soit, si vous voulez vraiment le faire, ajoutez simplement 'Company' à la liste de sélection et au DTO. –

+0

J'ai compris! Merci Diego ... –

Questions connexes