我目前正在使用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());
}
现在我尝试在application.conf中使用LOCK_TIMEOUT修改db.default.url="jdbc:h2:mem:events
,并设置MVCC = TRUE,但仍然抛出异常。
我可能认为的问题是我将我的EntityManager声明为静态字段
static EntityManager entityManager = entityManagerFactory.createEntityManager();
虽然我不确定这是否是错误的原因,或者这只是一个糟糕的想法和不好的做法,或者两者都没有。
问题是,为什么只有在重新编译和加载页面后抛出异常?