【问题标题】:Nhibernate One To Many With Criteria使用标准一对多休眠
【发布时间】:2012-12-11 11:01:17
【问题描述】:

我有一个包含相关对象列表的类。

我将其映射如下:

<class name="MyDto" table="`MyView`" mutable="false"  lazy="false">
    <id name="Id" column="ID" type="int">
        <generator class="assigned" />
    </id>

    <set name="Days" cascade="all-delete-orphan" lazy="false" >
          <key column="Id" />
          <one-to-many class="MyAssociatedObj"/>
    </set>
</class>

<class name="MyAssociatedObj" table="V_SC_NEED" mutable="false" lazy="false" >
    <id name="Id"  column="`ID2`" type="int">
        <generator class="assigned" />
    </id>

    <property type="DateTime" not-null="true" name="DayDate"  column="`Date`" />

    <component name="Audit">
        <property type="string" not-null="true" length="255" name="Username" column="`USERNAME`" />
        <property type="decimal" not-null="true" name="PreviousValue" column="`PrevVal`" />
    </component>
</class>

我想要做的是获取 MyDto 对象的列表,通过我的关联对象 MyAssociatedObject 进行过滤。

这意味着,例如,如果我这样做:

UnitOfWork.Session.CreateCriteria<MyDto>().List<MyDto>()

我得到一个 42 行的列表。 现在,我想通过我的关联对象过滤它们,并限制它们之间。 问题是当我这样做时:

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days").Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate));

我得到了,不知何故 684 行! (一些笛卡尔产品或其他东西)。

有什么建议吗? 非常感谢!

【问题讨论】:

  • 你能发布你的 MyDto 的 equals 方法吗?

标签: c# .net sql nhibernate


【解决方案1】:

您在第二个查询中获得了更多行,因为您与 MyAssociatedObjJOINing,这似乎与您的 @ 存在 多对一 关系987654322@班。
如果要过滤掉重复的MyDTO,可以使用DistinctRootResultTransformer:

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days")  
   .Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate))  
   .SetResultTransformer(  
          new NHibernate.Transform.DistinctRootEntityResultTransformer());  

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2012-09-01
    • 1970-01-01
    • 2011-10-09
    • 2012-12-24
    相关资源
    最近更新 更多