2011-07-09 6 views
13

Est-il possible d'imbriquer des méthodes annotées @Transactional au printemps? Pensez à quelque chose comme ceci:Nested @Transactional

@Transactional 
public void a() { 
    obj.b(); 
} 

@Transactional 
public void b() { 
    // ... 
} 

Que se passe dans ce cas, si je rollback en b() et rollback dans un()?

Répondre

24

La deuxième @Transactional annotation sur la méthode b() n'est pas nécessaire car par défaut @Transactional a une propagation de REQUIRED donc des méthodes appelées par la méthode a() seront transactionnelle. Si vous cherchez à lancer une nouvelle transaction dans une méthode appelée par la méthode a(), vous devrez modifier les règles de propagation. Lisez à propos de Transaction Propagation.