Dalla documentazione riferimenti primavera
Primavera consiglia di annotare solo classi concrete (e metodi di classi concrete) con l'annotazione @Transactional, al contrario di annotare le interfacce. È certamente possibile posizionare l'annotazione @Transactional su un'interfaccia (o un metodo di interfaccia), ma questo funziona solo come ci si aspetterebbe se si utilizzano proxy basati su interfaccia. Il fatto che le annotazioni Java non siano ereditate dalle interfacce significa che se si utilizzano i proxy basati sulla classe (proxy-target-class = "true") o l'aspetto basato sulla tessitura (mode = "aspectj"), quindi il le impostazioni della transazione non vengono riconosciute dall'infrastruttura di proxy e tessitura e l'oggetto non verrà incapsulato in un proxy transazionale, il che sarebbe decisamente negativo.
In modalità proxy (che è l'impostazione predefinita), solo le chiamate del metodo esterno che arrivano attraverso il proxy sono intercettate .Ciò significa che l'autoinvocazione, in effetti, un metodo all'interno dell'oggetto target che chiama un altro metodo dell'oggetto target, non porterà a una transazione effettiva in fase di esecuzione anche se il metodo invocato è contrassegnato con @Transactional.
Quindi con @Transaction il comportamento predefinito è che qualsiasi RuntimeException attiva il rollback e qualsiasi eccezione verificata non lo fa. Quindi il rollback della transazione per tutte le RuntimeException e per l'Exception Throwable verificata
Provalo nella tua applcazione, presumo tu capisca cosa fa "@ Transactional". –
@ user3404577 Puoi mostrarci il tuo codice snippet? – Skizzo
@ user3404577 Dove è contenuto il metodo ** yearEndProcess **? La classe che contiene yearEndProcess è un servizio, componente o altro e finalmente implementa alcune interfacce? – Skizzo