2011-01-18 20 views
1

さまざまな種類のユーザーでUserテーブルを作成しようとしています。私はユーザークラスを持っているし、私は顧客と従業員とマネージャーと管理者によってそれを拡張し、彼らはすべて同じテーブルのユーザーに住んでいるが、それらはすべて異なったdiscriminatorsを持っています。JPA @Discriminator:1つのエンティティを別のエンティティにキャストする方法(ディスクリミネータに基づいて)

私のアプリケーションは、最初にユーザーが来て、ユーザーとしてサインインしてから、顧客または従業員になります。ユーザーが顧客または従業員を作成した後、後でマネージャーまたは管理者に変更したいと考えています。どのように私はそれを更新することができます。どのようにして識別子の値をエンティティの本来の値と違わせることができますか。

単純なSQLを使用してテーブルのDTYPE値を更新できますが、JPAにはより効率的な方法が必要です。

以前の「従業員」ユーザーを削除し、新しい「管理者」ユーザーを作成していますか?私はエンティティをインスタンス化しようとしましたが、そのエンティティのDiscriminatorを更新できる方法はありません。

ありがとう Syed。

私はあなたが同じように、コピーコンストラクタを作成し、新しいオブジェクトをインスタンス化することができると思い

答えて

0

new Employee(existingUser); 

したがって識別子(@Idフィールド)がコピーされ、エンティティを永続化するとき、更新がトリガされます。それを試してみてください。

1

Userを有していてもよい場合は、おそらくUser(または多対一の一対一の関係を有する別個のエンティティとして(例えばCustomerEmployeeManagerAdminなど)Userの役割をモデル化する方がよいです同時にいくつかRoles)。次に、ユーザーの役割が変更された場合、単純に1つの役割を削除して別の役割を作成することができます。

関連する問題