即使没有调用persist,JPA/Hibernate也会保存

Bar*_*lom 8 java hibernate jpa

em.getTransaction().begin();

StringData sd = em.find(StringData.class, key);
System.out.println("Old value: " + sd.getData());
sd.setData(newValue);
// em.persist(sd);

em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我没有打电话persist,它被注释掉了,因为我先干这个代码.然而,事实证明它并不是那么干燥.在检查数据库时,我看到数据已更改(幸运的是它是一个测试数据库).

显然我对Hibernate/JPA的理解是有缺陷的.是不是persist总是要求更改数据?如果没有,什么时候保存什么什么规则?

Pab*_*blo 10

是的,如果检测到任何更改,则在完成刷新(使用提交执行刷新)时保存托管实体,这称为脏检查.