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 .