2009-01-07 4 views
12

Tenir compte du fichier de mapping Hibernate suivant:Application de l'attribut filtre Hibernate à un sac avec plusieurs-à-plusieurs

<hibernate-mapping ...> 
<class name="ContentPackage" table="contentPackages"> 
    <id name="Id" column="id" type="int"><generator class="native" /></id> 
    ... 
    <bag name="Clips" table="contentAudVidLinks"> 
     <key column="fk_contentPackageId"></key> 
     <many-to-many class="Clip" column="fk_AudVidId"></many-to-many> 
     <filter name="effectiveDate" condition=":asOfDate BETWEEN startDate and endDate" /> 
    </bag> 
</class> 
</hibernate-mapping> 

Quand je lance la commande suivante:

_session.EnableFilter("effectiveDate").SetParameter("asOfDate", DateTime.Today); 

    IList<ContentPackage> items = _session.CreateCriteria(typeof(ContentPackage)) 
            .Add(Restrictions.Eq("Id", id)) 
            .List<ContentPackage>(); 

Le SQL résultant a la clause WHERE sur la table de mappage intermédiaire (contentAudVidLinks), plutôt que sur la table "Clips" même si j'ai ajouté l'attribut filter au Bag of Clips.

Qu'est-ce que je fais mal?

Répondre

16

Compris. Pour toute personne intéressée, j'avais mon <filter> attribut au mauvais endroit:

Avant:

<bag name="Clips" table="ctv_bb_contentAudVidLinks"> 
    <key column="fk_contentPackageId"></key> 
    <many-to-many class="Clip" column="fk_AudVidId"></many-to-many> 
    <filter name="effectiveDate" condition=":asOfDate BETWEEN startDate and endDate" /> 
</bag> 

Après:

<bag name="Clips" table="ctv_bb_contentAudVidLinks"> 
    <key column="fk_contentPackageId"></key> 
    <many-to-many class="Clip" column="fk_AudVidId"> 
    <filter name="effectiveDate" condition=":asOfDate BETWEEN startDate and endDate" /> 
    </many-to-many> 
</bag> 
Questions connexes