我想使用父类中的属性对集合(SET)应用过滤器。
我发现我可以将该where
子句用于集合 - 它似乎有效 - 但我不确定这是否是最好的选择,或者这个解决方案是否会在未来给我带来痛苦。
这是我班级的映射Order
:
<class name="Order" table="OCSAORH_NHBP" mutable="false" where="OCHAMND = 0">
<composite-id>
<key-property name="Number" column="OCHORDN" type="String" length="10"></key-property>
<key-property name="Ver" column="OCHAMND" type="Int32"></key-property>
<key-property name="Company" column="OCHCOSC" type="String" length="5"></key-property>
</composite-id>
<property name="WareHouseDelivery" column="OCHMAGS" type="String" length="7"></property>
<set name="OrderLines" access="field.pascalcase-underscore" inverse="true" lazy="true" mutable="false" cascade="none" where="OCLMAGS = this_.OCHMAGS">
<key>
<column name="OCLORDN" not-null="true"/>
<column name="OCLAMND" not-null="true"/>
<column name="OCLCOSC" not-null="true"/>
</key>
<one-to-many class="OrderLine" not-found ="ignore" />
</set>
</class>
这是我的课OrderLine
:
<class name="OrderLine" table="OCSALIN_NHBP" mutable="false" where="OCLAMND = 0">
<composite-id>
<key-property name="Number" column="OCLORDN" type="String" length="10"></key-property>
<key-property name="Company" column="OCLCOSC" type="String" length="5"></key-property>
<key-property name="Line" column="OCLLINN" type="Int32"></key-property>
<key-property name="Seq" column="OCLSSEQ" type="Int32"></key-property>
</composite-id>
<property name="Item" column="OCLITMN" type="String" length="19"></property>
<property name="WareHouseDelivery" column="OCLMAGS" type="String" length="7"></property>
<many-to-one name="Order" class="Order">
<column name="OCLORDN" not-null="true"/>
<column name="OCLAMND" not-null="true"/>
<column name="OCLCOSC" not-null="true"/>
</many-to-one>
</class>
这是一个 Oracle 旧数据库,我无法更改它的架构。主键都是复合的。
现在,我想使用一些标准获取订单,并使用字段OCHMAGS(属性 WareHouseDelivery)作为过滤器延迟加载订单行。
如您所见,我where
使用父表的别名在集合中定义了一个子句:
<set name="OrderLines" ... where="OCLMAGS = this_.OCHMAGS">
PS:我渴望加载我的订单集合:
var qry = .QueryOver<Domain.Order>()
.Fetch(t => t.OrderLines).Eager
.JoinAlias(t => t.OrderLines, () => orderLine, JoinType.LeftOuterJoin);
这是一个可行的解决方案吗?还有其他选择吗?