“升级”实体从基类到子

时间:2016-12-27 18:14:06

标签: java hibernate

我有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对象被持久化时,在用户和出价人表中都创建了一个具有相同id值的记录。

最初为每个系统用户 - 我们创建用户实体,但过了一段时间后,用户需要“升级”到Bidder。

有没有办法以优雅的方式“升级”用户到投标人?

我有几点想法 -

  1. 在Bidder表中插入具有相同ID的记录,即用户
  2. 最初创建Bidder实体对象,但事情并非全部     用户可以是投标人
  3. 创建具有的BidderInfo实体类     与用户的一对一关系
  4. 不要创建Bidder子类,但是     将所有需要的字段从Bidder添加到将要转换的用户     最初用户到投标人,这破坏了用户的语义
  5. 所有上述想法看起来都不是完美的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您真的不想拥有2个牌桌,可以使用InheritanceType.SINGLE_TABLE@disciminatorValue。 通过这种方式,要更改用户的类型,您只需更改鉴别器值。

您将找到"单表策略的示例" to this page

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