我有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;
}
当Bidder对象持续存在时,在user和bidder表中都创建了一个具有相同id值的记录。
最初,我们为每个系统用户创建用户实体,但是过了一段时间,用户需要“升级”到Bidder。
有什么办法可以让用户以某种优雅的方式“升级”到竞买人?
我有几个想法-
用户在具有相同ID的Bidder表中插入一条记录,
最初创建Bidder实体对象,但还不是全部
用户可以成为竞标者
创建BidderInfo实体类,该类将具有
与用户一对一关系
不要创建Bidder子类别,但是
将所有需要的字段(从竞价者)添加到用户,这将转换为
用户最初是竞价者,这破坏了用户的语义
以上所有想法都不是完美的解决方案。
最佳答案
如果您真的不想有2个表,可以使用InheritanceType.SINGLE_TABLE
和@disciminatorValue
。
通过这种方式,要更改用户类型,您只需要更改鉴别值即可。
您将找到“单表策略” to this page的示例。
这种方法似乎是最简单的,但可能不是最好的。