以下代码如何在JPA内部执行?

时间:2017-04-28 12:26:39

标签: java jpa transactions commit persist

entityManager.getTransaction.begin();

Employee emp = new Employee();

emp.setName("Abc");

emp.setCity("Pune");

entityManager.persist(emp);

emp.setName("Xyz");

entityManager.getTransaction.commit();

我知道它会更新名称,但内部如何运作?就像流程以及执行entityManager.persist(emp);并执行entityManager.getTransaction.commit();时对数据库的影响一样?

1 个答案:

答案 0 :(得分:3)

当您调用entityManager.persist(emp);时,实体不会物理保留在数据库中。它由Persistence Provider从那时起进行管理。

当您致电entityManager.getTransaction.commit();时,这就是生成持久实体的实际物理插入的位置。

通过调用基本上与数据库同步的entityManager.flush(),您可以告诉持久性提供程序在提交事务之前执行插入数据库。您必须记住,这不会提交事务,因此仍可以回滚数据。