首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在游戏中@Transactional是如何在控制器之外工作的!框架?

在游戏中@Transactional是如何在控制器之外工作的!框架?
EN

Stack Overflow用户
提问于 2015-09-15 18:38:13
回答 1查看 984关注 0票数 3

我试图在Play中使用注解(Guice)实现我自己的方法拦截器。然而,似乎只有在包含类是由Guice (reference)创建的情况下,这些注释才能工作(并因此被拦截)。这就引出了一个问题:@Transactional是如何在Controller类之外工作的!?它本质上是一个方法拦截器,不管包含类是如何创建的,它都工作得很好?我也可以在我的模型和服务类中使用它。

EN

回答 1

Stack Overflow用户

发布于 2015-09-16 00:19:29

@Transactional不能在控制器之外工作。您唯一的方法就是使用JPA.withTransaction

示例:

代码语言:javascript
运行
复制
public Promise<Integer> doWork() {
    return promise(() -> jpaApi.withTransaction(() -> {
        return JPA.em()
            .createNativeQuery("DELETE FROM table WHERE id=1")
            .executeUpdate();
    }), dbExecutionContext);
}

或者甚至不需要额外的执行上下文(在调用者线程中执行):

代码语言:javascript
运行
复制
public Promise<Integer> doWork() {
    return jpaApi.withTransaction(() -> {
        return JPA.em()
                .createNativeQuery("DELETE FROM table WHERE id=1")
                .executeUpdate();
    });
}

别忘了注入play.db.jpa.JPAApi。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32583891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档