我对Play中的JPA用法有疑问。 我已经创建了一个Model Class并使用@Entity和一个Controller类进行了注释,其中我有一个用@ 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)));
}
}
答案 0 :(得分:1)
我认为你不需要实现这个类,你需要在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;