我试图在Play中使用注解(Guice)实现我自己的方法拦截器。然而,似乎只有在包含类是由Guice (reference)创建的情况下,这些注释才能工作(并因此被拦截)。这就引出了一个问题:@Transactional是如何在Controller类之外工作的!?它本质上是一个方法拦截器,不管包含类是如何创建的,它都工作得很好?我也可以在我的模型和服务类中使用它。
发布于 2015-09-16 00:19:29
@Transactional不能在控制器之外工作。您唯一的方法就是使用JPA.withTransaction
示例:
public Promise<Integer> doWork() {
return promise(() -> jpaApi.withTransaction(() -> {
return JPA.em()
.createNativeQuery("DELETE FROM table WHERE id=1")
.executeUpdate();
}), dbExecutionContext);
}
或者甚至不需要额外的执行上下文(在调用者线程中执行):
public Promise<Integer> doWork() {
return jpaApi.withTransaction(() -> {
return JPA.em()
.createNativeQuery("DELETE FROM table WHERE id=1")
.executeUpdate();
});
}
别忘了注入play.db.jpa.JPAApi。
https://stackoverflow.com/questions/32583891
复制相似问题