2010-11-19 5 views
0

抽象基本クラスのマッピングから具象の共用サブクラスへの多対1の関係のマッピングに問題があります。例:抽象基底クラスから共用サブクラスへのNHibernateの多対1の関係のマッピング

ここからわかるように、私はすべてのデータベースオブジェクトの基本抽象クラスを持っています。これらのクラスを、抽象マッピングクラスとしてのEntityクラスと、共用サブクラスとしてのUserとマッピングしています。設定オブジェクトを作成するとき、エラーはスローされず、スキーマは正常にエクスポートされます。ただし、OwnerUserへのフィールドは、すべての具象クラスのデータベースには表示されません。ここでは、マッピングの様子の例を示します。

<class entity-name="Entity" name="Entity" abstract="true"> 
    <id name="ID" type="guid"> 
     <generator class="guid.comb"/> 
    </id> 
    <property name="Name" /> 
    <many-to-one name="OwnerUser" column="ID" entity-name="User" /> 
</class> 

<union-subclass name="User" entity-name="User" extends="Entity"> 
    <property name="UserName" /> 
</union-subclass> 

また、データベースのバックエンドとしてOracle XEインスタンスも使用しています。これが質問に正しく答えるのに十分な情報でない場合は、私に知らせてください。私ができることを追加します。

最悪のシナリオすべての具体的なオブジェクトに多対1の関係を明示的に追加するだけですが、これは最も洗練された解決策ではありません。私はさまざまなインターネットを動かすチューブでこれの具体的な例を見つけることができませんでしたし、何かを見逃していたかもしれないが、これが無効なユースケースであることをドキュメンテーションに明示していませんでした。これは初めてではありませんでした。 -/

この質問に対する回答は非常に高く評価されています。あなたの時間をありがとう。

答えて

0

うわー、ちょうど...うわー。

このポストを削除しようとする代わりに、私はこの特定のユースケースに関して何の疑問も見つけられなかったので、1日を見つけるために別の低いnhibernate noobのためにそれを残します。

実際に問題なく処理できます。私の問題は、多対1のマッピング要素で列属性のIDを指定していたことでした。何らかの奇妙な理由から、私はそれが外来キーが参照していたカラムだと思った(私が間違っていなければ、実際はproperty-refです)。その属性は、実際には参照を保持するテーブルの列名を指定します(これは大丈夫です)。驚くべきことに、NHibernateは警告なく、複数のマッピング要素を同じ列名にうまくマッピングします。私はそれらを非難しようとしているわけではないでしょう。おそらく、多態性の派生クラスに対してある種の上書きを許可するケースがあります。

とにかく、これは有効な使用例であり、参照表の列の名前に列属性を変更しても問題ありません。おそらく、私は今週の毎晩ちょっと長いビットとバイトを見ています... sigh

この投稿をチェックする時間がかかった皆さん、ありがとうございます。

関連する問題