[
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 (aId is FK and part of PK)and bId, and C has @EmbeddedId pk class which include aId(aId is FK and part of PK), bId(bId is FK and part of PK), cId
B has oneToMany relationship to D, D has @EmbeddedId pk class which including aId and bId (aId and bId is FK and part of PK)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();
s = (A) session.copyObject(s, p);
return s;
}
========================================================
In the console, i can see that it clearly insert A with auto generated aId, but when inserting B, it insert null for aId, I use prePersist callback to set bId. for my case, how can I set aId when inserting object B, I have to use postPersist callback in object A to set it up?