我们如何获得JPA EntityManager Flush工作

2022-09-02 13:11:47

我的问题是为什么冲洗不起作用:

public void ejbService(){
   Customer c = em.find(Customer.class,1);
   c.setName("newName");
   em.flush();
   //at this point when I query mysql table I can not see "newName"


   thread.sleep(10000);

   c.setName("anotherName");
}

完成方法后,我在数据库中看到“otherName”,我也用em.find(Customer.class,1,Lock.None)检查它;但仍然不工作

断续器


答案 1

您正在刷新,但未提交 - 或以其他方式结束可能配置为自动提交的事务/会话。

是的,在调用 后,DBMS 现在可以知道您的数据 - 但按照 ACID 标准,在 DBMS 被告知提交之前,其他数据库会话都不会看到此数据。flush()

在不知道有关应用程序其余部分背后的体系结构等的其他详细信息的情况下,您可能希望执行以下操作:

em.getTransaction().commit();

答案 2

推荐