次のオブジェクト モデルがあります。
Element
多くの子と子孫を持つトップレベルの抽象クラス。- クラス
Event
。 - それぞれに s の
Element
袋が含まれていますEvent
。 - それぞれ
Event
に親へのポインターがありますElement
。
これまでは、かなり標準的な 1 対多の関係でした。
しかし、具体的なクラス戦略ごとにテーブルを使用したい。したがって、クラスElement
はデータベースにマップされません。私はこの方法で解決しようとしました: の具体的な子孫のそれぞれがElement
独自の Bag of Event
s を定義します。これの問題は、各<bag>
要素に要素が含まれていること<key>
です。Parent
そのキーは のプロパティを指していますEvent
。またParent
、s テーブルの列をEvent
、Bag を含むテーブルへの外部キーにします。しかし、1 つの列を複数のテーブルの外部キーにすることはできず、挿入時に例外が発生します。
Parent
また、Event
s テーブルのフィールドを多対任意の種類のフィールドにしようとしました。それはうまくいきました。しかし、リレーションを双方向にしたい場合、つまり の子孫にバッグを追加したい場合Element
、同じ問題に戻ります。バッグ => 外部キー => 挿入時の例外。
このケースは見かけほどユニークではないと確信しています。よろしくお願いいたします。