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

时间:2015-05-10 14:54:08

标签: java hibernate jpa playframework

我对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)));
    }
}

1 个答案:

答案 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;