我定义了以下关系
实体 A 与实体 B 具有 @OneToMany,而实体 B 与实体 C 具有 @OneToOne。
在创建实体 A 时,我还创建了实体 B 并设置它们之间的关系。一切都按预期工作。
在另一个事务中, - 从数据库中获取实体 A,获取相应的实体 B,然后 - 创建实体 C。- 实体 C 设置在实体 B 上,以伪造两者之间的关系。如果我使用 EntityManager.persist(Entity B),持久性管理器会尝试将 Entity B 再次插入 DB,从而导致对 Entity B 的 PK 的唯一约束违反。如果我使用 EntityManager.merge(Entity B),一切都按预期工作.
在上述使用上下文中,为什么要持久化操作尝试创建副本,因为在这种情况下管理实体并且它应该能够轻松地进行更新。