2016-09-09 2 views
1
@Transactional(propagation = Propagation.NOT_SUPPORTED) 
public void a(){ 
    a(); 
    b(); 
} 
@Transactional(propagation = Propagation.REQUIRED) 
public void b(){ 
    //do something 
} 
@Transactional(propagation = Propagation.REQUIRED) 
public void c(){ 
    //do something 
} 

Verfahren b() und die Methode c() Verwenden derselben Transaktion? Vielen Dank.Feder @Transactional Ausbreitung in einem() -Aufruf b() und c()

+1

Ich empfehle diese http://stackoverflow.com/questions/1099025/spring-transactional-what-happens-in-background zu lesen, um zu verstehen, wie '@ Transactional' funktioniert und was in diesem speziellen Fall passiert. – chimmi

Antwort

1

Ich denke, den Code korrigiert werden soll von rekursiven Aufruf zu verhindern, wie folgt:

@Transactional(propagation = Propagation.NOT_SUPPORTED) 
public void a(){ 
    c(); 
    b(); 
} 

In diesem Fall c() und b() nicht in einer Transaktion ausgeführt werden, @Transactional Anmerkung ist nur gültig, wenn eine Methode von einer externen Klasse aufgerufen wird, nicht innerhalb derselben Klasse.

+0

Obwohl ich verstehe, was Sie sagen, denke ich, 'von außerhalb der Klasse genannt' ist falsch. Das manuelle Erstellen einer Instanz und das Aufrufen von 'a()' darauf erfüllt dieses Kriterium, aber es wird aus offensichtlichen Gründen nicht funktionieren. – chimmi

Verwandte Themen