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();
如您所见,我没有调用persist,它已经被注释掉了,因为我先是干运行这段代码。但是,事实证明它不是很干。检查数据库后,我发现数据已更改(幸运的是,这是一个测试数据库)。
persist
显然,我对Hibernate / JPA的理解是有缺陷的。并非persist总是需要打电话来更改数据吗?如果没有,保存什么东西的规则 是 什么?
是的,如果检测到任何更改,则在完成刷新(也使用提交完成刷新)后保存托管实体,这称为脏检查。