【问题标题】:Entity is not persisted using EclipseLink实体未使用 EclipseLink 持久化
【发布时间】:2016-03-28 05:39:41
【问题描述】:

我正在学习 JPA。在下面的代码中,我试图坚持Point,然后列出Points 进行检查,结果发现它没有被保存。为什么?

谢谢!

    PersistenceProvider provider = new PersistenceProvider();
    EntityManagerFactory emf = provider.createEntityManagerFactory("sample", null);

    EntityManager em = emf.createEntityManager();
    // DROP TABLE POINT
    // CREATE TABLE POINT (ID BIGINT NOT NULL, X DOUBLE, Y DOUBLE, PRIMARY KEY (ID))
    // DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'
    // SELECT * FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'
    // INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)


    Point p = new Point(1, 1);
    em.persist(p);
    // UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
    //   bind => [2 parameters bound]
    // SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = ?
    //   bind => [1 parameter bound]
    em.close();


    EntityManager em2 = emf.createEntityManager();
    Query query = em2.createQuery("select p from Point p");
    List list = query.getResultList();
    // SELECT ID, X, Y FROM POINT
    System.out.println("Found objects: " + list.size());
    // Found objects: 0
    for (Object elt: list){
        System.out.println(elt);
    }

整个项目:https://github.com/greenmarker/EclipseLinkTest

【问题讨论】:

    标签: java jpa persistence eclipselink h2


    【解决方案1】:

    因为你那里没有事务,所以什么都没有提交。

    一些 JPA 提供程序将允许“非事务性”写入(您尝试在那里执行的操作,例如 DataNucleus JPA),但很多都不允许,因此您需要这样做

    em.getTransaction().begin();
    
    ... (persist, merge, remove calls)
    
    em.getTransaction().commit();
    

    如果您想要独立于供应商的持久性代码

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2017-09-27
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多