我有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的示例。

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

07-24 16:07