在NHibernate中查询映射子类的属性

时间:2012-01-25 10:52:30

标签: nhibernate

我对NHibernate很新,所以这可能相当微不足道,但搜索让我感到困惑。

我有一个AddOnAmount表格如下:

AddOnID | AddOnTypeID | Period | Amount

其中AddOnTypeID是FK。这些行在AddOnTypeIDPeriod上具有唯一约束。

映射如下所示:

<id name="Id" column="AddOnId" type="long">
    <generator class="native" />
</id>

<many-to-one name="AddOnType" column="AddOnTypeID" class="AddOnTypeStatic" not-null="true" />
<property name="Period" />      
etc.

AddOnTypeStatic类/表只有一个Id,它是存储在表格中的数值,还有一个描述性的Name

我正在尝试编写一个将按AddOnTypeIdPeriod搜索的查询,因此我可以在尝试从前端添加副本之前验证行的存在(或不存在) ,但我不知道如何做到这一点,因为AddOnAmountStatic类有一个子类,而表只有一个Id。 到目前为止我写过:

    public AddOnAmountStatic FindByAddOnTypeAndPeriod(long addOnType, string period)
    {
        return FindOne(CreateCriteria()
                           .Add(Restrictions.Eq("AddOnTypeId", addOnType))
                           .Add(Restrictions.Eq("Period", period))
                           .SetCacheable(true));
    }

不起作用,因为AddOnTypeId不是AddOnAmountStatic的属性。不确定如何在此上下文中访问子类的属性。

我的绘图工作正常,因为到目前为止我一直在使用它而没有任何问题。

1 个答案:

答案 0 :(得分:0)

解决了我的问题 - 很简单,但我认为我会在这里添加解决方案,以防它帮助其他人。

我一直在考虑从表的角度构建查询(即使用AddOnTypeID),而我应该做的是从实体的角度来看它。换句话说,我只需要传入一个AddOnTypeStatic对象。

我所做的是获取AddOnTypeID参数,通过NHibernate检查 it (返回AddOnTypeStatic对象或null)然后将其传递给原始查询。最终查询只是

return FindOne(CreateCriteria()
              .Add(Restrictions.Eq("AddOnType", addOnType))
              .(Restrictions.Eq("Period", period))
              .SetCacheable(true));

希望这有助于另一个新手!