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