所以我参加了一个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">
一个人怎么做到这一点?
答案 0 :(得分:0)
我认为在这种情况下可以使用子选择(假设您的RDMS支持它);所以像:
<set name="someCollection" table="B" where="type_var = (SELECT A.type_var FROM A WHERE A.fk_aid = id)">
我对你在这里想要达到的目标并不十分清楚;但您可以考虑将其映射为仅查询属性;正如this article中讨论的那样。