0

我正在使用 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]
    • 刷新,合并:有效,但如果我创建一个不在数据库中的新对象“b”并尝试将其添加到 A,我收到以下错误:org.hibernate.TransientObjectException:对象引用了未保存的瞬态实例 - 保存刷新前的瞬态实例:B

您知道使用 saveOrUpdate 并避免这些错误的正确配置是什么吗?或者有什么办法可以避免这个问题?

4

1 回答 1

0

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

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

于 2013-08-30T10:29:10.763 回答