首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MethodValidationPostProcessor中断@Transactional

MethodValidationPostProcessor中断@Transactional
EN

Stack Overflow用户
提问于 2016-09-16 13:51:41
回答 1查看 412关注 0票数 2

我有一个Controller,它调用一个具有@Transactional注释的Service

但是,当我声明bean MethodValidationPostProcessor时,no事务被创建了(无法初始化代理-没有会话)。

代码语言:javascript
复制
@EnableWebMvc
@ComponentScan(basePackages = {"my"})
public class Application extends WebMvcConfigurerAdapter {
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }
}

控制器bean:

代码语言:javascript
复制
@RestController
@RequestMapping(path = "/my", produces = APPLICATION_JSON_VALUE)
public class MyController {

    @Autowired
    private TransactionalService transactionalService;

    @RequestMapping(method = POST)
    public void post(@SafeHtml @RequestBody String hey) {
        transactionalService.doStuff(hey);
    }
}

服务bean:

代码语言:javascript
复制
@Service
public class TransactionalService {

    @PersistenceContext
    private EntityManager entityManager;

    @Transactional
    public void doStuff(String hey) {
        Item h = entityManager.find(Item.class, hey);
        h.getParent(); // could not initialize proxy - no Session
    }

}

当我声明@Transactional时,我想了解为什么MethodValidationPostProcessor不能工作。谢谢!

注意:如果我在我的Controller上添加了“事务处理”,它就能工作。但这不是我想做的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-19 15:57:50

多亏了@Kakawait,我找到了一个解决方案:声明我的bean MethodValidationPostProcessor。需要是static,这样@Transactional仍能正常工作。

代码语言:javascript
复制
/**
 * This bean must be static, to be instantiated before the other MethodValidationPostProcessors.
 * Otherwise, some are not instantiated.
 */
@Bean
public static MethodValidationPostProcessor methodValidationPostProcessor() {
    return new MethodValidationPostProcessor();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39533215

复制
相关文章

相似问题

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