NHibernate内部连接master-detail在除id之外的列上

时间:2009-07-15 15:37:12

标签: .net nhibernate nhibernate-mapping

假设以下映射条目:

< class name =“Customer”table =“customer”>

<id name="InternalId" column="uintCustomerId" type="long">
  <generator class="identity" />
</id>

<!-- The BinaryBlob below is a 16 byte array - Think Guid.NewGuid().ToByteArray -->
<property name="CustomerUid" column="uidCustomerId" type="BinaryBlob" not-null="true" /> 
<property name="Name" column="strFullName" type="String" not-null="true" />
<property name="Age" column="intAge" type="System.Int32" not-null="true" />

<set name="Orders" table="order" generic="true" inverse="false" lazy="false" cascade="all">
  <key column="uidCustomerId" />
  <one-to-many class="Order" />
</set>

&LT; class name =“Order”table =“order”&gt;

<id name="InternalId" column="uintOrderId" type="long">
  <generator class="identity" />
</id>

<!-- This BinaryBlob is a 16 byte array - Think Guid.NewGuid().ToByteArray -->
<property name="CustomerUid" column="uidCustomerId" type="BinaryBlob" not-null="true" /> 

<property name="OrderDate" column="datOrderDate" type="System.DateTime" not-null="true" />

所以有两个类:Customer - 具有上述映射中定义的属性的订单

客户PK是uintCustomerId

订单PK是uintOrderId

uidCustomerId是Customer表上的唯一键,Order表上的fk是Customer uidCustomerId是二进制(16)

数据库无法更改。

鉴于上述情况。我们如何使用NHibernate Criteria API查询在给定日期之后带来客户及其相关订单。注意:我们需要加入不是主键的uidCustomerId。

这可以通过Criteria API完成吗? 这是可以用HQL完成的吗?

谢谢, TASOS

1 个答案:

答案 0 :(得分:1)

我尝试过类似你需要的东西。这是我搞砸的代码(没有测试)。

IList customers = sess.CreateCriteria(typeof(Customer))
    .CreateAlias("Orders", "order")  
    .CreateAlias("order.OrderDate", "orderdate")
    .Add( Expression.Ge("orderdate", somedate) )
    .List();

这是NH CreateAlias

的一个很好的参考