2016-12-27 10 views
0

にエンティティを「アップグレード」私は、入札者のオブジェクトがユーザーと作成した入札者テーブルの両方に、永続化されるときに1が別のは、基本クラスから子

@Entity 
@Table(name = "user") 
    public class User { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private Long id; 

     @NotNull 
     private String login; 

     @Column(name = "password_hash",length = 60) 
     private String password; 
    } 

@Entity 
@Table(name = "bidder") 
public class Bidder extends User { 

@Column(length = 100, unique = true) 
private String email; 

} 

から派生し2つのエンティティを持っています同じid値を持つレコード。

最初はシステムエンティティごとにユーザーエンティティを作成しますが、しばらくしてからユーザーはBidderに「アップグレード」する必要があります。

私はいくつかのエレガントな方法でユーザーを入札者に "アップグレード"する方法はありますか?

私はいくつかのアイデアがある -

  1. 同じIDの入札者テーブルにレコードを挿入し、そのユーザは
  2. は当初入札者エンティティ・オブジェクトを作成しておりますが、事は、すべての ユーザーが入札者することができない
  3. ユーザー
  4. へ 一対一relatioshipは、入札者の子クラスを作成しますが、 たのWiユーザーに入札者からのすべての入用のフィールドを追加しない必要がありますBidderInfoエンティティクラスを作成します最初に ユーザーを入札者に変換し、ユーザーのセマンティクスを損なうものがあります。

上記のアイデアは完璧な解決策のようには見えません。

答えて

1

実際に2つのテーブルが必要ない場合は、InheritanceType.SINGLE_TABLE@disciminatorValueを使用できます。 このように、ユーザーのタイプを変更するには、ディスクリミネータ値を変更するだけです。

"single table strategy"の例はto this pageです。

この方法は最も簡単なようですが、それは最良ではないかもしれません。

関連する問題