2 つのエンティティ マネージャーを使用して、2 つの異なるデータベース間でエンティティをコピーするユーティリティがあります。
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は null です。Piece でマップされたホルダーを明示すると、joincolumn がコピーされますが、モデルを双方向に変更することはできません。
何が間違っている可能性がありますか?同じ entityManager でのデタッチとマージも正常に機能します。 UPDATE : 生成された SQL には HOLDER_ID の更新が含まれていないため、同じエンティティ マネージャーでも「失敗」します。
(JPA プロバイダーとして Hibernate を使用しています)。