如何将此条件写入NHibernate HBM映射?

时间:2010-08-24 03:11:12

标签: c# nhibernate nhibernate-mapping

所以我参加了一个NHibernate速成课程,有点像下面的例子。

假设我有以下.NET类:

class A {
    int id;
    int type_var;
    List<B> someCollection;
}

class B {
    int id;
    string someText;
}

我可能会将其映射为:

<class name="A" table="A">
    <id name="id" type="Int32">
         <generator type="identity" />
    </id>
    <property name="type_var" />
    <set name="someCollection" table="B">
         <key name="fk_aid" />
         <composite-element class="B">
              <property name="someText" />
         </composite-element>
    </set>
</class>

我的问题是,如果我们只对那些属于A的B元素感兴趣(通过fk_aid)并且type_var值等于A(假设A和B都有一个type_var),你会如何改变这个映射?列,但它们没有明确相关)。

我在想我必须在这里使用where子句吗?

<set name="someCollection" table="B" where="type_var = type_var">

一个人怎么做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下可以使用子选择(假设您的RDMS支持它);所以像:

<set name="someCollection" table="B" where="type_var = (SELECT A.type_var FROM A WHERE A.fk_aid = id)"> 

我对你在这里想要达到的目标并不十分清楚;但您可以考虑将其映射为仅查询属性;正如this article中讨论的那样。