我将 Play Framework 2.3 与 Hibernate 结合使用,并在用户尝试访问未定义的路由时尝试呈现我的 404 页面。
我的主模板调用数据库,以获得填充导航栏中下拉列表的项目列表。当我尝试从 onHanderNotFound 方法内的 Global 类渲染 404 模板时,这会导致问题,因为我的 404 模板扩展了我的主模板。
这个问题有解决办法吗?简单地用 @play.db.jpa.Transactional 注释重写的 onHanderNotFound 方法并不能解决问题,无论哪种方式,我都会得到以下异常:
java.lang.RuntimeException:没有 EntityManager 绑定(bind)到此线程。尝试使用 @play.db.jpa.Transactional 注释您的操作方法
我还尝试调用具有如下注释的 Controller :
public class Global extends GlobalSettings {
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return F.Promise.pure(Application.pageNotFound());
}
}
但是,一切都没有改变。
最佳答案
只需在 JPA 上下文中调用操作,就像调用使用 @Transactional
注释的操作一样:
public class Global extends GlobalSettings {
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return JPA.withTransaction(new F.Function0<F.Promise<Result>>() {
@Override
public F.Promise<Result> apply() throws Throwable {
return F.Promise.pure(Application.pageNotFound());
}
});
}
}
关于java - 没有 EntityManager 绑定(bind)到全局?尝试从 onHandlerNotFound 进行事务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295268/