2016-12-27 76 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的例子。

这种方式似乎是最简单的,但它可能不是最好的。