2016-09-16 69 views
1

我有一個Controller它調用Service其中有@Transactional註釋。MethodValidationPostProcessor休息@Transactional

但是當我聲明一個bean MethodValidationPostProcessor,沒有創建事務(無法初始化代理 - 沒有會話)。

@EnableWebMvc 
@ComponentScan(basePackages = {"my"}) 
public class Application extends WebMvcConfigurerAdapter { 
    @Bean 
    public MethodValidationPostProcessor methodValidationPostProcessor() { 
     return new MethodValidationPostProcessor(); 
    } 
} 

控制器豆:

@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); 
    } 
} 

服務豆:

@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不起作用。謝謝 !

注意:如果我在我的控制器上添加了@Transactional,它可以工作。但這不是我想要做的。

+0

沒有看到你的班級很難說。 –

+0

你好,我已經完成了我所需要的課程。 – Pleymor

回答

2

感謝@Kakawait,我得到了一個解決辦法:宣佈我的豆MethodValidationPostProcessor。需要成爲static,這樣@Transactional才能正常工作。

/** 
* 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(); 
} 
+0

我遇到同樣的情況,這個解決方案的作品!但想知道這是春天的bug列表嗎?彈簧靴1.4.5 – klc