在Teneo中选择cascade_policy_on_non_containment

时间:2013-08-27 11:18:53

标签: java hibernate teneo

我正在使用Teneo / EMF / Hibernate,我做了一个简单的测试。

  • 我创建了2个对象A和B.A与B(B1)一对多具有非包含关系。
  • 这是我的测试代码:

    // 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();
    
  • 以下是我在Teneo中选项CASCADE_POLICY_ON_NON_CONTAINMENT的不同配置以及我得到的相应错误消息:
    • REFRESH,MERGE,PERSIST:org.hibernate.NonUniqueObjectException:具有相同标识符值的其他对象已与会话关联:[B#6]
    • REFRESH,MERGE:有效,但如果我创建一个不在DB中的新对象“b”并尝试将其添加到A,我会收到以下错误:org.hibernate.TransientObjectException:object引用未保存的瞬态instance - 在刷新之前保存瞬态实例:B

您知道使用saveOrUpdate的正确配置是什么,并避免这些错误吗?或者是避免这个问题的任何解决方案?

1 个答案:

答案 0 :(得分:0)

Martin Taal在Eclipse论坛上回答了我的问题。

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