Worum geht es in Ihrer Frage eigentlich? Die Verwendung der @Repository
Anmerkung oder @Transactional
.
@Repository
wird überhaupt nicht benötigt, da die von Ihnen deklarierte Schnittstelle von einem Proxy unterstützt wird, für den die Spring Data-Infrastruktur eine Ausnahmeübersetzung erstellt und aktiviert. Die Verwendung dieser Anmerkung auf einer Spring Data-Repository-Schnittstelle hat also keinerlei Auswirkungen.
@Transactional
- Für das JPA-Modul haben wir diese Anmerkung in der Implementierungsklasse, die den Proxy ( SimpleJpaRepository
) unterstützt. Dies hat zwei Gründe: Erstens erfordert das Fortbestehen und Löschen von Objekten eine Transaktion in JPA. Daher müssen wir sicherstellen, dass eine Transaktion ausgeführt wird, indem wir die Methode mit Anmerkungen versehen @Transactional
.
Lesemethoden wie findAll()
und findOne(…)
verwenden , @Transactional(readOnly = true)
die nicht unbedingt erforderlich ist , sondern löst ein paar Optimierungen in der Transaktion Infrastruktur (Einstellung der lassen Persistenz - Provider möglicherweise verschmutzt Prüfungen nicht durchgeführt , wenn das Schließen ). Darüber hinaus wird das Flag auch für die JDBC-Verbindung gesetzt, was zu weiteren Optimierungen auf dieser Ebene führt.FlushMode
MANUAL
EntityManager
Je nachdem, welche Datenbank Sie verwenden, können Tabellensperren weggelassen oder sogar Schreibvorgänge abgelehnt werden, die Sie möglicherweise versehentlich auslösen. Daher empfehlen wir, auch @Transactional(readOnly = true)
Abfragemethoden zu verwenden, mit denen Sie diese Anmerkung problemlos zu Ihrer Repository-Schnittstelle hinzufügen können. Stellen Sie sicher, dass Sie @Transactional
den Manipulationsmethoden, die Sie möglicherweise in dieser Schnittstelle deklariert oder neu dekoriert haben , eine Ebene hinzufügen .
@Transactional(readOnly = true)
die Schnittstelle zu verwenden (da sie normalerweise hauptsächlich Finder-Methoden enthält) und diese Einstellung für jede modifizierende Abfragemethode mit einer Ebene zu überschreiben@Transactional
. So wird es eigentlich gemachtSimpleJpaRepositoy
.Ich denke, dass die Frage etwas weiter gefasst ist und nicht auf die Anmerkungen auf der Datenzugriffsschicht reduziert werden kann. Wir müssen den gesamten Stapel der Anwendung, die Transaktionsstrategien, die wir anwenden möchten, usw. berücksichtigen. Es gibt eine sehr umfassende Reihe von Artikeln zu diesem Thema von Mark Richards auf der IBM Developerworks-Website. Den ersten finden Sie hier: https://developer.ibm.com/articles/j-ts1/
Freundliche Grüße
quelle
Sie sollten
@Repository
Anmerkungen verwendenDies liegt daran
@Repository
, dass Sie Ihre ungeprüfte SQL-Ausnahme in Spring Excpetion übersetzen. Die einzige Ausnahme, die Sie behandeln sollten, istDataAccessException
quelle
Wir verwenden auch die @ Transactional-Annotation, um den Datensatz zu sperren, damit ein anderer Thread / eine andere Anforderung den Lesevorgang nicht ändert.
quelle