2016-09-16 17 views
1

私はを呼び出すControllerを持っています。これは@Transactionalというアノテーションを持っています。MethodValidationPostProcessorが破損する@Transactional

しかし、私は豆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 
    } 

} 

私はMethodValidationPostProcessorを宣言するとき@Transactionalが動作しない理由を理解したいと思います。ありがとう!

注:コントローラに@Transactionalを追加すると動作します。しかし、それは私がしたいことではありません。

+0

教えにくいクラスは見ません。 –

+0

こんにちは、私はあなたが必要とするようにクラスを完了しました。 – Pleymor

答えて

2

@Kakawaitのおかげで、私の回避策が見つかりました:私の豆を宣言するMethodValidationPostProcessor。 @Transactionalが正常に動作するように、staticにする必要があります。

/** 
* 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

私は同じケースに当たっています。このソリューションは機能します!しかし、これは春のバグリストにあるのだろうか?春のブート1.4.5 – klc