2009-08-30 4 views
0

私は、継承構造の基底クラスが別のクラスとの関連性を持ち、基底クラスのサブタイプにもアソシエーションがマッピングされているかどうか疑問に思っていたエンティティモデルを持っていますか?少し詳しくNHibernateの継承とアソシエーション

は、ここではシステムのこの部分の基本的なアウトラインです:

交通は基本クラスであり、所有者との関連を持っています。 バイクと車はサブクラスの2つです。

これらは、テーブルごとのサブクラス継承構造を使用して同じ名前で3つのテーブルに表されます。 Transportテーブルは、Ownerへの外部キー参照を保持します。

これはどのように私はこのマッピングがうまくいくのですか、私は正しいですか?私はこれに対処する周りに何も見ていないので、私はそれが良い質問だと思った。

<class name="Transport" table="TRANSPORT"> 
    <id name="Id" type="Int64" column="Transport_ID"> 
     <generator class="native"/> 
    </id> 

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

    <joined-subclass name="Bike" table="BIKE"> 
     <key column="Bike_ID"/> 
    </joined-subclass> 
    <joined-subclass name="Car" table="CAR"> 
     <key column="Car_ID"/> 
    </joined-subclass> 
</class> 

答えて

0

私はJava用の休止状態を使用しましたので、いくつかの特定の事柄は、あなたの場合には適用されないかもしれません...しかし、私はそれが非常にsimmilarだろうと仮定します。

上位クラスのすべてのマップされたプロパティ(関連を含む)は、先祖でアクセス可能です。 XMLにマッピングされていないスーパークラス、または注釈付きのスーパークラスを持つことができます。これらのスーパークラスのプロパティは、データベースにまったく格納されません。

怠惰なローディングと組み合わせた共有クエリ(つまり、トランスポートタイプのクエリ)で遭遇する可能性のある問題があります.Hibernateは、祖先から任意のプロパティにアクセスするために使用できないスーパータイプ専用のプロキシを作成します。それ以外の場合は、期待どおりにすべてがうまくいくはずです。