oneToMany在不同的entityManagers之间复制

时间:2012-05-17 16:41:20

标签: jpa-2.0

我有一个实用程序,可以使用两个实体管理器在两个不同的数据库之间复制实体。

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中显示了一个holder的映射,则会复制joincolumn,但我无法将模型更改为双向。

任何可能出错的想法?在同一个entityManager中分离和合并也可以正常工作。 UPDATE :生成的sql不包含HOLDER_ID更新,因此在同一个entityManager中也“失败”。

(我正在使用Hibernate作为JPA提供程序)。

1 个答案:

答案 0 :(得分:0)

好的,我发现如果表是空的,那么生成的sql是

1/ Insert for Holder
2/ Insert for each Piece
3/ Update to setup Holder_id in each Piece

但如果表格包含持有人但不包含作品

1/ Insert for each Piece

这就是碎片损失引用Holder的原因。

相关问题