2009-12-17 4 views
0

J'essaie de créer une requête Critères pour sélectionner les objets liés via une table d'association.Hibernate Criteria Query - Comment faire une recherche parmi les many-to-many avec des attributs?

Insurer * - 1 Insurer_Section 1 - * Section 

InsurerSection a un attribut d'association: active: bool.

Comment obtenir tous les assureurs dont l'attribut actif de la classe InsurerSection est défini sur true?

PS: Je ne peux pas aller comme ça:

Insurer.FindAll(
DetachedCriteria.For<Insurer>().CreateCriteria("Insurer_Section").Add(Expression.Eq("Active", true) 
); 

parce Insurer_Section est une table d'association qui ne cartographié via HasAndBelongsToMany:

[HasAndBelongsToMany(typeof(Section), Table = "`Insurer_Section`", 
      ColumnKey = "`IdInsurer`", ColumnRef = "`IdSection`", 
      Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)] 
     private IList<Section> Sections { 
      get { return this.sections; } 
      set { this.sections = value; } 
     } 

ET

[HasAndBelongsToMany(typeof(Insurer), Table = "`Insurer_Section`", 
      ColumnKey = "`IdSection`", ColumnRef = "`IdInsurer`", 
      Cascade = ManyRelationCascadeEnum.None, Inverse = true)] 
     public IList<Insurer> Insurers { 
      get { return this.insurers; } 
      set { this.insurers = value; } 
     } 

Répondre

2

Vous ne peut pas faire cela, si votre table d'association a des propriétés dont vous avez besoin, vous devez mapper l'association en un-à-plusieurs (à une nouvelle entité pour Insurer_Section) qui a alors une relation many-to-one avec Section. Au moment où la table d'association devient plus que les clés primaires et les colonnes d'index possibles, vous devrez mapper la table d'association en tant qu'entité séparée reliant les deux entités (Assureur et Section avec les informations d'association, comme IsActive)

0

Torkel est correct. Vous devez non seulement créer la nouvelle entité de liaison, mais également modifier la collection pour chacune des entités en une collection de votre nouvelle entité de liaison. Ensuite, modifiez les mappages selon les besoins.

Questions connexes