没有 EntityManager 绑定到全局?尝试从 onHandlerNotFound 进行交易

No EntityManager Bound To Global? Attempting Transaction from onHandlerNotFound

我将 Play Framework 2.3 与 Hibernate 一起使用,并在用户尝试访问未定义的路由时尝试呈现我的 404 页面。

我的主模板调用了数据库,以获取填充导航栏下拉列表的项目列表。当我尝试在我的 onHanderNotFound 方法中从全局 class 呈现我的 404 模板时,这导致了一个问题,因为我的 404 模板扩展了我的主模板。

是否有解决此问题的方法?简单地用 @play.db.jpa.Transactional 注释覆盖的 onHanderNotFound 方法并不能解决问题,无论哪种方式我都会得到以下异常:

java.lang.RuntimeException: 没有 EntityManager 绑定到这个线程。尝试使用 @play.db.jpa.Transactional

注释您的操作方法

我还尝试调用具有如下注释的控制器:

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());
            }
        });

    }
}