Da doc riferimento primaverafa primavera @transaction lavoro su un metodo concreto di classe astratta
Primavera consiglia di annotare solo classi concrete (e metodi di classi concrete) con l'annotazione @Transactional, al contrario di annotazione interfacce. È certamente possibile posizionare l'annotazione @Transactional su un'interfaccia (o un metodo di interfaccia), ma 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"), le impostazioni della transazione non sono riconosciuti dall'infrastruttura di proxy e tessitura e l'oggetto non verrà incapsulato in un proxy transazionale, il che sarebbe decisamente negativo.
Sebbene parli solo di interfacce, anche le classi astratte sono considerate non concrete.
Quindi, se ho una classe astratta
public abstract class BaseService{
//here is a concrete method
@Transactional
public void updateData{
//do stuff using dao layer
}
e una classe concreta che estende la classe
public class SpecialService extends BaseService{
//body of class
}
Ora, se io chiamo specialService.updateData()
dalla mia classe di controllo sarà transazionale?
Cosa succede quando si prova? –