java - JPA 合并,包括子项

标签 java jpa merge persistence

我有一个实体(人),其中包含地址列表。该用户界面实际上只允许为每个名称输入一个地址。

用户可以创建一个人员,然后添加地址。在数据库中,我有一个人行和一个地址行。然后,用户可以通过 UI 更新地址。我在实体管理器上调用合并,以便使用同一个人。问题是地址没有合并,而是添加了新行。因此我有一个人行和两个地址行。只有第二个地址行有效。

我的这种关系的代码是:

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "person")
@OrderBy("id asc")
private List<Address> addresses;

我可以添加任何注释来强制合并子项吗?或者我必须自己手动执行此操作?

理想情况下,在上述场景中,Person 表中有一行,地址表中有一行。

谢谢

最佳答案

如果 Id 与现有对象匹配,merge() 将合并到现有对象中。确保地址的Id相同。

另外,如果您只有一个地址,为什么要使用 OneToMany,只需使用 OneToOne。

关于java - JPA 合并,包括子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10315230/

相关文章:

java - 错误 : Selection does not contain a main type

hibernate - 如何使用 hibernate 生成自定义 ID,而它必须是表的主键

java - JPA 可插入 = false 可更新 = false 创建时未更新 id

java - 使用带有 <merge> 和 <include> 标签的自定义 View 时 findViewById 崩溃

javascript - 将 DOM 对象转换为 Javascript 对象

java - 从独立客户端查找远程 EJB 时出现断言错误 "Context may not be null"

java - 为什么必须在for循环初始化中声明变量?

java - 使用 Spring、JPA 和 Hibernate 访问在 Jboss 中配置的多个数据库/数据源

visual-studio - 缺少合并工具中的 Visual Studio 合并更改

java - 如何按值遍历 Map 以及如果值相同则按键对它们进行排序?