2016-09-16 1 views
1

J'ai un Controller qui appelle un Service qui a @Transactional annotation.MéthodeValidationPostProcessor breaks @Transactional

Mais lorsque je déclare un bean MethodValidationPostProcessor, aucune transaction n'est créée (impossible d'initialiser le proxy - aucune session).

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

haricot Controller:

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

haricot service:

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

} 

Je voudrais comprendre pourquoi @Transactional ne fonctionne pas quand je déclare MethodValidationPostProcessor. Merci !

Remarque: Si j'ajoute @Transactional sur mon contrôleur, cela fonctionne. Mais ce n'est pas ce que je veux faire.

+0

Sans voir votre classe difficile à dire. –

+0

Bonjour, j'ai terminé mes cours selon vos besoins. – Pleymor

Répondre

2

Grâce à @Kakawait, j'ai eu une solution: déclarer mon bean MethodValidationPostProcessor. Doit être static pour que @Transactional fonctionne toujours correctement.

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

Je frappe le même cas et cette solution fonctionne! Mais se demander est-ce sur la liste des bugs du printemps? botte à ressort 1.4.5 – klc