2

我目前正在使用 Java Play 2.0.1 和 h2 内存数据库。

我目前在我的一个页面上的表格中显示数据库中包含的所有项目,这工作正常,包括 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