以下代码在调用“em.refresh(p)”时抛出异常:
1: EntityManager em = emf.createEntityManager();
2: em.getTransaction().begin();
3:
4: Product p = new Product("J&D", 35.0,"Whisky");
5: em.persist(p);
6:
7: em.refresh(p);
8: em.getTransaction().commit();
9: em.close();
在调试代码时,我们看到 Hibernate 没有在第 6 行将记录写入数据库。他确实做到了 - 在需要时,而不是更早。
在第 7 行,我们得到以下异常: 线程“main”中的异常 javax.persistence.PersistenceException: org.hibernate.HibernateException: 这个实例在数据库中还没有作为一行存在
当我们在第 6 行强制 Hibernate 将记录刷新到 DB 中时,执行 INSERT 并且不会发生错误。我们可以通过执行选择或强制刷新来做到这一点(有所有后果):
6 : em.createQuery("select p from Product p").getResultList();
6 : em.flush();
我的问题:“刷新”方法是否应该不强制 Hibernate 将记录写入数据库,就像之前放置的 select 或 flush 语句一样?(这可能是一个错误吗?)。
提前感谢您的回答。
皮埃尔