我有一个实用程序可以使用两个实体管理器在两个不同的数据库之间复制实体。
Query q = em1.createQuery("SELECT o FROM Holder o WHERE o.id=1");
Holder holder = (List<Holder>) q.getSingleResult();
em1.clear();
em2.getTransaction().begin();
em2.merge(holder);
em2.getTransaction().commit();
除 oneToMany 关系外,一切正常:
@Entity
public class Holder{
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "HOLDER_ID")
private Set<Piece> pieces;
}
@Entity
public class Piece{
//No mapped by to holder
}
操作的结果是持有者保持正常,并且片段也保持不变,但HOLDER_ID 为空。如果我在 Piece 中显式地由持有者映射,则会复制连接列,但我无法将模型更改为双向。
关于什么可能是错误的任何想法?在同一个 entityManager 中分离和合并也可以正常工作。 更新:生成的 sql 不包含 HOLDER_ID 更新,因此在同一个 entityManager 中也“失败”。
(我使用 Hibernate 作为 JPA 提供程序)。