em.flush() が行うことは、内部 SQL 命令キャッシュを空にし、データベースに対してすぐに実行することです。 JPA/Hibernate での flush() の正しい使用
しかし、JPA em.flush() を使用して sql をデータベースに実行したところ、データベースに対してすぐに sql を実行できないことがわかりました。現在のトランザクションがコミットされる前に、データベース内のデータを見つけることができませんでした。
play フレームワークの例:
em=JPA.em();
Transaction tx=em.getTransaction();
tx.begin();
em.persist(customer);
em.flush();
em.persist(address);
tx.commit();
em.flush(); にまたがったときに、行 em.flush() にブレークポイントを設定しました。
その後、データベースで顧客データを見つけることができませんでした。
em.flush(); を省略した場合 現在のトランザクションがコミットされたときに、データもデータベースに入ります。