我目前正在使用 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();
虽然我不确定这是否是错误的原因,或者这只是一个糟糕的想法和糟糕的做法,或者两者都不是。
问题是,为什么只有在重新编译和加载页面后才抛出异常?