現在、Java Play 2.0.1 と h2 メモリ データベースを使用しています。
現在、データベースに含まれるすべてのアイテムをページの 1 つのテーブルに表示していますが、これは CRUD 操作を含めて正常に機能します。ただし、データベースに含まれるすべてのアイテムを削除してから、何らかの方法でコードを変更すると (コメントを追加するなど、ページを再コンパイルしてリロードするためだけに)、データベース アイテムが表示されているページを表示しようとすると、私は例外がスローされます:
PessimisticLockException: Timeout trying to lock table
ラインから
x = entityManager.createQuery("FROM X").getResultList();
私の削除方法:
@Transactional
public static Result deleteEvent(Long hjid){
entityManager.remove(entityManager.find(X.class, hjid));
flash("success", "Event has been deleted");
return redirect(routes.Application.events());
}
ここdb.default.url="jdbc:h2:mem:events
で、application.conf で LOCK_TIMEOUT を使用して変更し、MVCC=TRUE を設定しようとしましたが、それでも例外がスローされます。
問題になる可能性があると思われるのは、EntityManagerを静的フィールドとして宣言することです
static EntityManager entityManager = entityManagerFactory.createEntityManager();
これがエラーの原因なのか、それとも単に悪い考えと悪い習慣なのか、そのどちらでもないのかはわかりませんが。
質問は、ページを再コンパイルしてロードした後にのみ例外がスローされるのはなぜですか?