2016-12-27 61 views
0

我有2個實體,其中一個是從另一個從基類「升級」實體到子

@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; 

} 

當競買人對象持久保存,用戶和投標者表中創建派生一個具有相同id值的記錄。

最初爲每個系統用戶 - 我們創建用戶實體,但一段時間後用戶需要「升級」爲投標人。

有沒有一種方法可以將用戶以某種優雅的方式「升級」給用戶?

我有幾個想法 -

  1. 插入投標人表中的記錄具有相同ID,該用戶已
  2. 最初創建投標人實體對象,但事情是不是所有的 用戶可投標人
  3. 創建這將有 一對1 relatioship到用戶
  4. 沒有創建投標人子類BidderInfo實體類,但 從投標人添加所有的要緊領域的用戶,其無線LL 用戶轉換爲競買人開始,而這是敗壞用戶

上述所有的想法並不像完美的解決方案的語義。

回答

1

如果你真的不想要2張桌子,你可以使用InheritanceType.SINGLE_TABLE@disciminatorValue。 通過這種方式,要改變用戶的類型,您只需更改鑑別器值。

你會發現一個「單表戰略」to this page的例子。

這種方式似乎是最簡單的,但它可能不是最好的。