2009-07-01 11 views
0

私はNHibernateを使用しています。Hibernateのキーマッピングの問題

<id name="SpecificNumber" column="SpecificNumber" type="int"> 
    <generator class="assigned"/> 
</id> 
<set name="SubTable" table="SubTable"> 
    <key column="Owner_id"/> 
    <one-to-many class="SubTable"/> 
</set> 

とテーブル

<many-to-one name="Owner" class="Owner" column="Owner_id"/> 

今私のC#クラス所有者がOWNER_ID性質を持っている、と私はありませんがあり サブテーブル

を持って 所有者 :私は2つのテーブルを持っていますSubTableクラスにも1つもありません。しかし、私のSubTableクラスにはタイプ所有者のプロパティがあります。

データベースにはすべて正しいと思われます。私はこの文を

ICriteria criteria = session.CreateCriteria<SubTable>(); 
criteria.Add(Expression.Eq("Owner_id",3)); 

を使用することにより、特定の所有者-IDと一致し、特定のサブテーブル、行を取得しようとすると、しかし、私はこの例外を取得:

は、「プロパティを解決できませんでした:のOWNER_ID:サブテーブル」

だから私は、休止状態でも、SubTableクラスにもOwner_idプロパティがあると思っています。そうすることなくこれを行う方法はありますか?私のSubTableクラスは、Ownerオブジェクト自体への参照を保持するプロパティを実行します。十分ではありませんか?または、モデルをあまりにも乱さずに、この種の結合選択の最善の方法を休止状態で選択するのは何ですか?

私が達成しようとしているのは、所有者のSpecificNumberがSubTableの参照として使用されていることです。そして、私は特定の所有者を持つ行のSubTableを照会したいと思います。

ありがとうございます!

答えて

2

条件照会では、データベースの列を参照してはいけません(Owner_idは表の列です)が、オブジェクトのプロパティを使用する必要があります。 ICriteria APIクエリとHQLクエリは、オブジェクト(およびそのプロパティ)で機能するため、db-columnsを参照しないでください。

ICriteria crit = session.CreateCriteria <SubTable>(); 
crit.AddAlias ("Owner", "o"); 
crit.Add (Expression.Eq("o.SpecificNumber", 23)); 
+0

ありがとう!あなたは私をたくさん助けました。 – noisecoder

関連する問題