Ho visto molti commenti in articoli dello stack-overflow ho trovato alcune cose su entrambi i @Transactional uso con @Service o con @ControllerPerché utilizzare @Transactional con @Service invece che con @Controller
"Di solito, uno dovrebbe mettere una transazione al livello di servizio."
"Il caso normale sarebbe quella di annotare su un livello di livello di servizio"
"operazioni marchio Think appartengono al livello di servizio. E 'quello che sa di unità di lavoro e casi d'uso. E' la risposta giusta se si avere diversi DAO immessi in un servizio che devono collaborare in un'unica transazione. " [Source]
svantaggio di utilizzare @Transactional con lo strato @service
Se ho avuto 2 metodi per esempio saveUser() e saveEmail() (perché devo conservare le email in un database per inviargli il presente più tardi - come una coda) creerei nel mio servizio un metodo saveUserAndSendEmail (utente User) che sarebbe transazionale. [Source]
Significa creo molti metodi a livello di servizio al posto di uno Salva metodo generico come segue
public <T> long save(T entity) throws DataAccessException {
Session session = sessionFactory.getCurrentSession();
long getGenVal=(Long) session.save(entity);
return getGenVal;
}
Secondo la soluzione di cui sopra, significa che abbiamo molti metodi come segue LOL. .
public <T> long saveAccount(T entity)....
public <T> long saveWithAuditLog(T entity, K entity1)....
public <T> long saveWithAuditLogAndEntries(T entity, K entity, M entity)....
superare questa situazione
UTILIZZO DEL @Transactional in @Controller e solo fare un generico metodo di salvataggio e salvare tutti i soggetti/modello utilizzando questo semplice metodo save. e se qualche metodo non riesce a salvare tutte le transazioni nel rollback del controller con successo.
altra situazione che assicurare che @Transactional dovrebbe essere utilizzato con @Controller
In @Controller:
pt.save(entity1);
pt.save(entity2);
int a = 2/0;
pt.save(entity3);
Nel caso in cui, @Transactional il servizio, prima 2 entità con successo salvato ma terzo non è un rollback di tutte le transazioni
Nel caso, @Transactional su @Controller tutte le tran il rollback della sottrazione avviene come eccezione
perché il sovraccarico di stack ha chiesto "Non eseguire transazioni nel controller.Metteteli nelle classi di livello di servizio. "? [source]
Si prega di non utilizzare il codice markup per il testo. È possibile utilizzare le virgolette di blocco per le citazioni, se lo si desidera. – Flexo
Penso che la soluzione migliore nel caso sia creare un altro livello di livello tra 'controller' e' service'. Come vedo io, il 'controller' gestisce solo le chiamate e prepara i vars per gestire e fare la logica su di essi. Il 'servizio' gestisce tutte le cose del DB. e il modello che dovrebbe trovarsi tra 'controller' e' service' può fare qualche logica. Nel tuo esempio fare poche azioni di salvataggio è un'azione logica sui dati. che significa metterli in 'model' e warp' model' con 'transactional' se necessario – oak
I metodi' saveUser() 'e' saveEmail() 'dovrebbero essere nel livello DAO. Quindi fai il metodo 'saveUserAndSendEmail (utente utente)' nel livello di servizio Transazionale. – xli