2016-11-21 12 views
0

私はクラスMVCを使用してクラス階層:Employee->{Manager, Waiter, Chef}でCRUDを処理しています。 私はdiscriminatorとしてフィールドDTYPEを使って単一テーブル継承戦略を使用しています。 私が立ち往生したのは、ウェイター - >マネージャー(ウェイターが昇進したのではなく、単にユーザーの入力エラーを修正するためのものです!!!)または他のエンティティーの組み合わせを更新する必要がある状況です。Hibernate:変更された型のエントリを更新します。

自体に休止状態私は明示的に行う場合でも、DTYPEフィールドに記録タイプを変更することを拒否:

managerは、既存のID(ウェイター型にbelongning(DTYPEと Managerクラスのオブジェクトである
managerDAO.update(manager); 

= "ウェイター"))。

今質問があります:私のユーザーの入力ミスを修正するにはどうすれば簡単ですか?元のWaiterエントリを同じIDのManagerエントリにする必要があります。

このような状況に対処するためにHibernateにいくつかのトリックがあるのだろうか?私は車輪を再発明したくない、または回避策を見つけることがHibernateチームによって予見されるべきであると感じているからです。

私はすでに正しい型の新しいエントリを削除し、再挿入

  1. SQLのDTYPEフィールド上の更新と
  2. を検討している...しかし、これはすべてが休止状態の誤った使用方法のように見えます。

助けていただけたら幸いです!

答えて

0

「人」オブジェクトにキャストされた「ウェイター」オブジェクト(人物が継承ツリーの親であると仮定して)に照会し、それをマネージャーにキャストし、関連フィールドを設定してマネージャーオブジェクトを永続させます。

関連する問題