2

現在、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();

これがエラーの原因なのか、それとも単に悪い考えと悪い習慣なのか、そのどちらでもないのかはわかりませんが。

質問は、ページを再コンパイルしてロードした後にのみ例外がスローされるのはなぜですか?

4

0 に答える 0