gpt4 book ai didi

java - "Upgrade"从基类到子类的实体

转载 作者:行者123 更新时间:2023-12-01 09:05:04 25 4
gpt4 key购买 nike

我有 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 值的记录。

最初,我们为每个系统用户创建用户实体,但一段时间后,用户需要“升级”为出价者。

有没有办法以某种优雅的方式将用户“升级”为出价者?

我有几个想法 -

  1. 在 Bidder 表中插入一条与用户具有相同 ID 的记录
  2. 最初创建Bidder实体对象,但事情还不是全部 用户可以是投标人
  3. 创建 BidderInfo 实体类,其中包含 与用户一对一的关系
  4. 不创建 Bidder 子类,但是 将所有必需的字段从投标人添加到用户,这将转换 User 最初是 Bidder,这破坏了 User 的语义

以上所有想法看起来都不是完美的解决方案。

最佳答案

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

您将找到“单表策略”的示例 to this page .

这种方式看起来是最简单的,但可能不是最好的。

关于java - "Upgrade"从基类到子类的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41350138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com