java - @Embeddable 有自己的 id
问题描述
我看到许多使用@Embeddable建立一对多关系的例子,如下所示:
@Entity
@Table(name = "profiles")
public class Profile {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ElementCollection
@CollectionTable(name = "profile_addresses", joinColumns = @JoinColumn(name = "profile_id"))
private List<Address> addresses;
// getters, setters
}
@Embeddable
public class Address {
@Column(name = "zip_code")
private String zipCode;
// other fields
}
它适用于这样的表:
profiles: addresses:
| id | name | | profile_id | zip_code |
| 1 | Alex | | 1 | 95050 |
| 1 | 95109 |
但是如何在可嵌入地址实体中使用它自己的自动生成的 id?例如,在这样的表格中:
profiles: addresses:
| id | name | | profile_id | address_id | zip_code |
| 1 | Alex | | 1 | 1 | 95050 |
| 1 | 2 | 95109 |
解决方案
当您为 Embeddable 定义主键时,它不再是 Embeddable。Embeddable 由它的父实体定义,并且没有自己的身份。这就是为什么 Embeddables 只能通过它的父实体访问并且无论如何都不能被取消引用的原因。
请参阅https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html
推荐阅读
- android - 如何在不点击通知横幅的情况下处理 FCM 数据负载?
- excel - 如何根据其他值结果在 Excel 中获取列值?
- python - 为 Jupyter Notebook 安装 python3 内核时出现导入错误
- json - Loading JSON multiline file into pyspark dataframe
- reactjs - 单击链接后,视图无法加载?
- c++ - arduino 开/关 NON 瞬时开关实施协助
- scala - 动态创建的测试 sbt
- java - 从 Java 中的 HTTP 服务器获取 GET 错误
- azure - 预测 API 成本 Azure
- algorithm - ta.crossover 在 pine 脚本中无法按预期工作