Prima di tutto, la gestione delle transazioni dovrebbe essere eseguita sul livello di servizio, non sul livello DAO, poiché ciò comporterebbe un notevole sovraccarico delle prestazioni (per gestire il livello di isolamento della transazione e la propagazione appropriati a ciascun metodo diverso). Inoltre, l'ambito di una unità di lavoro viene dal livello di servizio anziché dal livello di accesso ai dati: immagina di eseguire un processo aziendale che deve occuparsi di 2 o più DAO.
C'è molta discussione in Internet che punta in quella direzione come qui , qui e here .
Comunque, dal momento che è un'intervista, accettiamo la domanda così com'è. Dal mio punto di vista, usereste l'annotazione @Transactional
(o la configurazione XML) in entrambi i metodi e con una propagazione della transazione con valore REQUIRED
. In questo modo, quando uno di questi metodi viene richiamato e se non esiste alcuna transazione precedente, verrà creata una nuova transazione:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}