2017-08-11 1 views
1

J'apprends la gestion transactionnelle de Spring. J'ai deux questions. Si j'ai une méthode:Transaction de printemps lors de l'appel de la méthode privée

@Transactional 
public method1(){ 
method2() 
} 

public method2(){ 
dao.save() 
} 

S'il y a une exception dans method2, il y aura un retour en arrière?

Une autre question: Si j'ai une méthode:

@Transactional 
public method1(){ 
method2() 
} 

private void method2(){ 
dao.save() 
} 

S'il y a une exception dans method2, il y aura un retour en arrière? Merci.

+0

Rollback sera là pour les deux cas – StanislavL

Répondre

0

Oui, il y aura un retour en arrière. Les méthodes privées s'exécuteront dans la même transaction. Vous devez savoir que vous ne pouvez pas avoir une méthode privée @Transactional. Cela ne fonctionnera pas sans provoquer d'erreur. Ce comportement est expliqué dans Spring Docs:

En raison de la nature à base de proxy du cadre de l'AOP Spring, appelle à l'intérieur l'objet cible sont, par définition, ne seront pas interceptées. Pour les proxies JDK, seuls les appels de méthode d'interface publique sur le proxy peuvent être interceptés.

1

Oui aux deux. La méthode transactionnelle signifie qu'il ne doit y avoir aucune erreur pendant tout le temps d'exécution de la méthode.

S'il y a une erreur sur l'une des méthodes que vous appelez de l'intérieur, ces erreurs seront propagées et rendront la transaction échouée et annulée.

+0

Merci beaucoup. – brest1007