Play框架 - 在上下文中找不到EntityManager

时间:2016-10-17 10:31:06

标签: hibernate jpa playframework hikaricp

您好我在执行db操作时遇到异常。

java.lang.RuntimeException:在上下文中找不到EntityManager。尝试使用@ play.db.jpa.Transactional

注释您的操作方法

以下是代码

paymentResponse.onRedeem(response -> persistTransaction(response, buyerInformation.getCustomerId()));
paymentResponse.onRedeem(response -> completeProductOrder(response, buyerInformation));
paymentResponse.onRedeem(response -> postSuccessfulProcess(response, purchasePayload, buyerInformation));

persistTransaction和postSuccessfulProcess使用类似下面的内容进行数据库更新事务

JPA.withTransaction(() -> {

和要保存的代码就像

JPA.em().persist(entity);

withTransaction使用键"默认"从地图绑定EntityManager。但JPA.em()实际上查找名为currentEntityManager的EntityManager。我试图使用JPA.em("默认"),但它会给连接超时。

我是新玩的框架。你能否就这个问题向我提出一些补救措施。

1 个答案:

答案 0 :(得分:0)

从Play 2.5全局对象开始,不推荐使用JPA,而应使用JPAApi。 JPAApi必须先注入某处。由于我只看到代码的一小部分,我建议注入它的最简单方法是这样的:

JPAApi jpa = Play.current().injector().instanceOf(JPAApi.class);

现在你可以使用它了:

 jpa.withTransaction(() ->...

 jpa.em().persist(entity);

原因最好的方法是使用@Inject注释注入。

您可以在此post中找到有关从Play 2.5开始的JPA使用差异的更多信息。