玩! 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;
我有一个关于 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;