Следующий код вызывает исключение при вызове «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: этот экземпляреще не существует в виде строки в базе данных
Когда мы заставляем Hibernate сбросить запись в БД в строке 6, выполняется INSERT, и ошибка не возникает.Мы можем сделать это, выполнив выбор или просто принудительно сбросив (со всеми вытекающими последствиями):
6 : em.createQuery("select p from Product p").getResultList();
6 : em.flush();
Мой вопрос: должен ли метод «обновить» не заставлять Hibernate записывать запись в БД, как это делаетоператор select или flush ранее не размещался?(Может быть, это ошибка?).
Заранее спасибо за ваши ответы.
Пьер