2011-07-25 23 views
1

私は現在、継承に大きく依存しているドメインモデルを持っています。そして、Hibernateのプロキシモデルに関連するいくつかの問題のために、代わりにコンポジションを使用するようにモデルをリファクタリングしています。私はに実行してきた主な問題は、次のような状況です。Hibernate:継承からコンポジションへ

  1. が親としてレコードXを取得
  2. instance ofとダウンキャストに
  3. 休止状態に戻りプロキシが今壊れている

でさらに、親テーブルへの外部キー参照のようなものは、テーブルごとの具体的なサブクラスストラテジーでは機能しません。だから私は基本的にParentを具体的なクラスにして、Child1Child2への参照を親に入れます(必要に応じて結合を行う必要があります)。

この説明に基づいて、誰もが同様の経路を辿って問題を抱えているのですか、このアプローチは意味がありますか?私が考えなかったより良いアプローチはありますか?

答えて

1

私は決して他のものに変換する必要はありませんでしたが、私は両方のタイプを経験しました。あなたは正しい方向に向かっています。問題は実際には、そのような方法で使用されるinstanceofとdowncastingがポリモーフィズムを破ることです。これは、Hibernateがあなたが転覆する代わりに使用していると仮定しています。真のオブジェクト指向モデルへの移行は正しい方向への一歩です。

+0

多くの意味をなさない多型性に関する良い点です。 –

1

私はあなたのことをよく理解していれば、あなたの例では親はスーパークラスであり、child1とchild2はサブクラスです。 ほとんどの場合、構成はより良い選択です。私はあなたのモデルの詳細を知らないので、正しい方法であなたのことを言うでしょう。 しかし、私はあなたのchild1とchild2がparentへの参照を持っていると良いと思います。親を "拡張"するためです。親はそれが拡張されていることを知るべきではないので、親は子への参照を持つべきではありません。

関連する問題