2010-01-11 4 views
1

J'ai un ClassA qui a de nombreux éléments ClassB:NHibernate - problème avec le chargement désireux

public abstract class ClassA: IEntity<ClassA> 
{ 
    public virtual IList<ClassB> ClassBList { get; protected set; } 
    ... 
} 

Puis références ClassB élément ClassC:

public class ClassB 
{ 

    public ClassC CEntity { get; private set; } 

    public Percentage Percentage{ get; private set; } 
    ... 
} 

et voici le mappage pour ClassA (ClassB n'a pas mappage):

 HasMany(a => a.ClassBList).Component(a => 
     { 
      a.References(b => b.CEntity , "IDCEntity").ForeignKey("ID").Cascade.SaveUpdate().Not.LazyLoad(); 
      t.Map(b => b.Percentage, "Percentage"); 
      ...; 
     }).AsBag().Cascade.AllDeleteOrphan().Not.LazyLoad() 

Lorsque j'obtiens tous les éléments classA de la base de données, tous les ClassB de ClassBLi st chargé, mais il ne charge pas les éléments ClassC dans ClassB.

J'ai essayé le HQL suivant:

   var query = session.CreateQuery("select a from ClassA as a left join fetch a.ClassBList as b left join fetch b.CEntity as c"); 

      classAList = query.List<ClassA>(); 

mais je reçois cette erreur:

Exception = {"Query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=c,role=,tableName=ClassCTable,tableAlias=classc2_,or...

Je pense que cela se produit parce que je suis en train de l'élément de ClassC de charge désireux de ClassB, mais ClassB est pas dans la liste de sélection.

Quelle est l'alternative, ou la bonne HQL?

Note: je ne peux pas utiliser des critères en raison de problèmes this:

Répondre

0

Si le problème est à la charge hâte par une combinaison complexe, qui couvre 3 entités, peut-être de blog this aidera

Questions connexes