gpt4 book ai didi

java - 实体未使用 EclipseLink 持久化

转载 作者:行者123 更新时间:2023-11-30 08:42:55 24 4
gpt4 key购买 nike

我正在学习 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

最佳答案

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

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

em.getTransaction().begin();

... (persist, merge, remove calls)

em.getTransaction().commit();

如果你想要独立于供应商的持久化代码

关于java - 实体未使用 EclipseLink 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com