【问题标题】:Querying by property of mapped subclass in NHibernate在 NHibernate 中通过映射子类的属性进行查询
【发布时间】:2012-01-25 10:52:29
【问题描述】:

我对 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 的属性。不确定如何在这种情况下访问子类的属性。

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

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

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

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

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

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

    希望这可以帮助另一个新手!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2015-05-02
      • 2011-06-13
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多