玩! Framework JPA [RuntimeException: 没有 EntityManager 绑定到这个线程。尝试使用 @play.db.jpa.Transactional] 注释您的操作方法

Play! Framework JPA [RuntimeException: No EntityManager bound to this thread. Try to annotate your action method with @play.db.jpa.Transactional]

我有一个关于 Play 中 JPA 用法的问题。 我已经创建了一个模型 Class 并用 @Entity 注释它,还有一个控制器 Class,其中我有一个用 @play.db.jpa.Transactional 注释的静态方法。当我启动激活器 运行 时,所有内容都已正确编译,并且数据库已启动,但是一旦我通过

调用实体管理器的代码
    EntityManager em =  play.db.jpa.JPA.em();

抛出 NullException。 就我而言,persistence.xml 和 application.conf 是正确的,我已经研究过网络,但无济于事。 有哪些可能的解决方案? 提前致谢!

这是我使用 JPA 的具体代码片段:

public class UserController extends Controller {

@play.db.jpa.Transactional
public static Result registerResponse(){
    System.out.println("registerResponse called!");
    Form<MyUser> regForm = Form.form(MyUser.class).bindFromRequest();

    if (regForm.hasErrors()) {
        System.out.println("bad request");
        System.out.println("Form: " + regForm.toString());
        System.out.println("Errors: "+regForm.errors().toString());
        return badRequest(views.html.registration.render(regForm,Arrays.asList(Avatar.values())));
    } else {
        MyUser newuser = regForm.get();
        System.out.println("persisting");       

        EntityManager em =  play.db.jpa.JPA.em();  //Here is the Nullpointer exception
        em.persist(newuser);
        System.out.println("persisted");
        return ok(authentication.render(Form.form(Login.class)));
    }
}

我认为你不需要实例化这个 class,你需要使用 play.db.jpa.JPA.em()

中的方法

改变这个

EntityManager em =  play.db.jpa.JPA.em();  //Here is the Nullpointer exception
em.persist(newuser);

通过这个:

try {
            JPA.em().persist(newuser);
        }
        catch(PersistenceException pe){
            //the code for the exception
        }

导入import play.db.jpa.JPA;