[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] colon object and then insert
|
Hi,
I am having problems on colone object using eclipseLink
objectcopyingPolicy.
I have an entity A with children entity B, and B have multiple
children entity C , D. Here is the roughly for the structure.
A has oneToMany relationship to B, and A has pk aId annotated as
generatedValue AUTO. B is annotated as privateOwned,
@OneToMany(mappedBy="a", cascade = ALL, targetEntity=B.class)
B has oneToMany relationship to C, and B has @EmbeddedId pk
class which including aId and bId, and C has @EmbeddedId pk class which
include aId, bId, cId
B has oneToMany relationship to D, D has @EmbeddedId pk class
which including aId and bId and dId.
when using the snippet below to colon object and then persist
it,
===================
private EntityManagerFactory emf =
Persistence.createEntityManagerFactory("brancoch");
private EntityManager em =
emf.createEntityManager();
// first step, tried to retrieve one existing one
from Db
A a = findAById(new String("10005699"));
String xml = getXml(a);
System.out.println(xml);
// next step, colon A and then insert colonedA
a = fromXml(xml);
A colonedA = clone(a, em);
em.getTransaction().begin();
em.persist(colonedA);
em.getTransaction().commit();
-------------------------------------
private A clone(A s, EntityManager em) {
EntityManagerImpl eme = (EntityManagerImpl)
em.getDelegate();
Session session = eme.getSession();
ObjectCopyingPolicy p = new ObjectCopyingPolicy();
p.cascadePrivateParts();
//p.setDepth(p.CASCADE_ALL_PARTS);
//p.cascadeAllParts();
s = (A) session.copyObject(s, p);
return s;
}
========================================================
In the console, i can see that it clearly insert A , and B with
differnt newly generated value aId, but when inserting C, it throws
error for duplciate recorde insertion, because it still using the old
aId instead of the new one.
is that because I use @EmbeddedId pk class in C? If that is
right, why it works for class B?