IT干货网

jpa之EntityManager 查询后不刷新数据

sky-heaven 2026年05月17日 编程设计 117 0

我当前的项目使用 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(); 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!