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

时间:2015-07-08 14:11:49

标签: java hibernate playframework playframework-2.0

我正在使用Play Framework 2.3和Hibernate,并且在用户尝试访问未定义的路由时尝试渲染我的404页面。

我的主模板调用数据库以获取填充导航栏中下拉列表的项目列表。当我尝试从我的onHanderNotFound方法中的Global类渲染我的404模板时,这会导致问题,因为我的404模板扩展了我的主模板。

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

java.lang.RuntimeException:没有绑定到此线程的EntityManager。尝试使用@ 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());
    }
}

但是,没有任何改变。

1 个答案:

答案 0 :(得分:1)

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

    }
}