2009-07-15 9 views
0

以外の列に主従に参加する次のマッピングエントリを仮定する:NHibernateの内側には、ID

<クラス名= "顧客" テーブルは= "顧客">

<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> 

<クラス名= "注文"テーブル= "注文">

<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" /> 

したがって、2クラス:顧客 - 上記のマッピングで定義されているような特性を持つ注文

カスタマーPKが注文PKがuintOrderId

uidCustomerIdは、Customerテーブルに一意のキーと上の顧客へのFKであるuintCustomerId

です注文テーブル uidCustomerIdはバイナリ(16)

データベースは変更できません。

上記を考慮すると、 NHibernate Criteria APIを使用してクエリを実行すると、顧客とその関連注文を特定の日付以降に持ち出すことができます。注:主キーではないuidCustomerIdに参加する必要があります。

これはCriteria APIで行うことができますか? これはHQLで行うことができるものですか?

おかげで、 Tasos

+0

のために良いの参照です。既にマッピングがある場合は、単純なCustomer.Ordersプロパティを使用して注文を参照するよりも、通常のようにCustomerを取得するだけです。 –

+0

ご意見ありがとうございますMufasa 特定のDateの後にOrdersを使用して顧客を希望された場合、どのようにクエリを実行しますか? – Anastasiosyal

答えて

1

は、私はあなたが必要とするものと同様のものを試してみました。ここで私がマッシュアップしたコード(テストなし)です。

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

は、ここで私は理解していないNH CreateAlias

+0

正しい方向のポインタをありがとう - 私はCreateAliasを認識していませんでした。もっと重要なのは、Expression.EqProperty( "kt.Name"、 "mt。名前 ") のIList猫= sess.CreateCriteria(typeof演算(猫)) .CreateAlias(" 子猫 " "KT") .CreateAlias( "メイト" を、 "MT") .Add(Expression.EqProperty(" kt.Name "、" mt.Name ")) .List(); – Anastasiosyal

関連する問題