Spring data jpa - @transactional
Unten ist der Fluss meiner Anwendung
Controller - services - repository
In der service-Ebene haben wir @Transactional
annotation
Wir haben auch jpa:repository
- Konfiguration, wobei wir die Angabe der entity-manager und txn-manager.
Meine Frage ist habe ich das Gefühl, dass die txn-manager angegeben in jpa:repositories
betrachtet und es gibt keine Auswirkungen der Angabe @Transactional
im service layer.
ZB : der service-layer @Transactional
zugeordnet werden können, um benutzerdefinierte txn-manager als repository aufgerufen, indem der Dienst kann über eine andere txn-manager. In diesem Fall wird es nicht schaffen, ein problem?
Kann Jemand klären, haben wir jemals benötigen, um @Transactional
auf service-Ebene, wenn wir mit jpa-repository ?
- Transaktionen müssen nicht abgegrenzt auf die DAO-Schicht: eine Einheit der Arbeit wird in der Regel verwenden verschiedene DAOs und orchestriert werden von einer einzigen Transaktions-service-Methode. Warum definieren Sie 2 unterschiedliche Transaktions-Managern, da Sie nur eines wollen?
- Ja... Weil, wenn Sie mehrere Datenbank-Anrufe, die Sie wollen, in einer einzigen Transaktion NICHT mehrere. Daher müssen Sie eine Transaktion gestartet wurde an der service-Ebene.
- Stimmen. Es ist ein design-Problem in der aktuellen Implementierung. Der Dienst ruft repostories Verbindung zu zwei verschiedenen Schemata ( dies sind Reine select-Abfragen und nicht JTA ) .Das ist der Grund, warum die jpa-repositories konfiguriert sind, mit unterschiedlichen entity-manager-factory und anderen txn-manager.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe Abschnitt 2.3 der Feder von Daten Referenz:
http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions
CRUD-Methoden, die auf das repository sind Transaktions-standardmäßig. Während diese Transaktionen können so konfiguriert werden, wie erforderlich ist, ist es normalerweise der Fall ist, wie vorgeschlagen, in den Kommentaren oben, dass Transaktionen angegeben werden, auf dem Service-layer, und in diesem Fall:
So, in Antwort auf Ihre Frage, Transaktionen können (und sollten) angegeben, an der service-level-unabhängig von Spring Data transaction management.