2009-01-07 70 views
12

考虑以下Hibernate映射文件:应用Hibernate的过滤器属性的袋与许多一对多的关系

<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> 

当我运行下面的命令:

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

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

产生的SQL在中间映射表(contentAudVidLinks)上有WHERE子句,而不是“Clips”表,即使我已将过滤器属性添加到剪辑包中。

我在做什么错?

回答

16

想通了。对于有兴趣的人,我有我的错地方<filter>属性:

前:

<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> 

后:

<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>