IMHO le transazioni devono passare al livello di servizio. In genere una transazione aziendale è composta da diverse query e aggiornamenti. Se si posiziona @Transactional
solo sul livello DAO, ogni query e aggiornamento verrà eseguito in una transazione separata, che effettivamente sconfigge lo scopo delle transazioni.
Ma se i servizi sono @Transactional
, ogni interazione di database unisce una transazione principale avviata quando il livello Web è entrato nel livello di servizio. Nota che in questo caso se il web layer esegue diversi metodi di servizio, ognuno di essi verrà eseguito in una transazione separata (lo stesso problema si è spostato di un livello). Tuttavia, il posizionamento di @Transactional
nel livello Web potrebbe introdurre effetti collaterali imprevisti come il problema N + 1, che altrimenti sarebbero stati rilevati. Quindi cerca di mantenere una transazione commerciale in un unico metodo di servizio chiamato dal livello web.
fonte
2012-01-24 20:10:57
u può spiegarmi chiaramente ... –
@JustinThomas che è come utile, ma diversi. –