次のコードは、「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();
コードをデバッグすると、6 行目で Hibernate がレコードを DB に書き込んでいないことがわかります。
7 行目で、次の例外が発生します: Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: this instance does not still exist as a row in the database
6 行目で Hibernate に強制的にレコードを DB にフラッシュさせると、INSERT が実行され、エラーは発生しません。select を実行するか、単にフラッシュを強制することでこれを行うことができます (すべての結果を伴います)。
6 : em.createQuery("select p from Product p").getResultList();
6 : em.flush();
私の質問:メソッド「リフレッシュ」は、前に配置されたselectまたはflushステートメントのように、HibernateにレコードをDBに強制的に書き込まないようにする必要がありますか? (これはバグでしょうか?)。
ご回答ありがとうございます。
ピエール