gpt4 book ai didi

jpa - EntityManager 查询后不刷新数据

转载 作者:行者123 更新时间:2023-12-04 16:30:10 28 4
gpt4 key购买 nike

我当前的项目使用 HSQLDB2.0 和 JPA2.0 。

场景是:我查询数据库以获取 contactDetails 的列表的 person .我删单contactInfo在 UI 中,但不保存该数据(取消保存部分)。

我再次执行相同的查询,现在结果列表比之前的结果少 1,因为我在 UI 中删除了一个 contactInfo。但是那个contactInfo如果我交叉检查,在 DB 仍然可用。

但如果我包括 entityManager.clear()在查询开始之前,我每次都得到正确的结果。

我不明白这种行为。有谁能帮我说清楚吗?

最佳答案

与其再次查询,不如试试这个:

entityManager.refresh(person);

一个更完整的例子:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("...");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();

Person p = (Person) em.find(Person.class, 1);
assertEquals(10, p.getContactDetails().size()); // let's pretend p has 10 contact details
p.getContactDetails().remove(0);
assertEquals(9, p.getContactDetails().size());

Person p2 = (Person) em.find(Person.class, 1);
assertTrue(p == p2); // We're in the same persistence context so p == p2
assertEquals(9, p.getContactDetails().size());

// In order to reload the actual patients from the database, refresh the entity
em.refresh(p);
assertTrue(p == p2);
assertEquals(10, p.getContactDetails().size());
assertEquals(10, p2.getContactDetails().size());

em.getTransaction().commit();
em.close();
factory.close();

关于jpa - EntityManager 查询后不刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295386/

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