Option cascade_policy_on_non_containment in Teneo

145 views Asked by At

I am working with Teneo/EMF/Hibernate and I've made a simple test.

  • I create 2 objects A and B. A has a non-containment relation one-to-many with B (B1).
  • This is my test code:

    // LOAD A
    Session session = this.hbds.getSessionFactory().openSession();
    Transaction transaction = session.beginTransaction();
    A loadedA = (A)session.createQuery("FROM A a LEFT JOIN FETCH a.b1").list().get(0);
    transaction.commit();
    session.flush();
    session.close();
    
    // LOAD B
    session = this.hbds.getSessionFactory().openSession();
    transaction = session.beginTransaction();
    B loadedB = (B)session.get("B", (Long)6L);
    transaction.commit();
    session.flush();
    session.close();
    
    // ADD B TO A
    session = this.hbds.getSessionFactory().openSession();
    transaction = session.beginTransaction();
    loadedA.getB1().add(loadedB);
    //loadedA.getB1().add(b);
    session.saveOrUpdate(loadedA);
    transaction.commit();
    session.flush();
    session.close();
    
    this.hbds.close();
    
  • The following ones are my different configurations for the option CASCADE_POLICY_ON_NON_CONTAINMENT in Teneo and the respective error messages I get:
    • REFRESH, MERGE, PERSIST: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [B#6]
    • REFRESH, MERGE: works, but if I create a new object "b" that is not in the DB and try to add it to A, I get the following error: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: B

Do you know what is the right configuration to work with saveOrUpdate and to avoid these errors? Or any solution to avoid this problem?

1

There are 1 answers

0
Nahuel On BEST ANSWER

Martin Taal answered my question in Eclipse's Forum.

http://www.eclipse.org/forums/index.php/m/1096426/