Spring Data CrudRepository und Transaktionen
Ich versuche, Transaktionen zu implementieren, die auf einem CrudRepository-Schnittstelle. Ich bin ein Anfänger mit dieser und mein Aktuelles problem ist, dass nach Erhalt viele Anfragen von unterschiedlichen clients aus, manchmal bin ich immer ein Duplikat.
Um zu vermeiden, dass wollte ich mit SQL-Transaktionen und deren Umsetzung mit Frühling, aber ich bin nicht in der Lage, um es arbeiten.
Hier ist, wie ich versucht habe, es zu tun :
@Repository
@EnableTransactionManagement
@Transactional
public interface ApplicationPackageDao extends CrudRepository<ApplicationPackage, Long> {
/**
* Find if a record exists for this package name ,
* @param packageName
* @return
*/
@Transactional
ApplicationPackage findByPackageName(String packageName);
}
Aber es scheint nicht zu funktionieren.
Ich versuchte, fügen Sie das @Transactionnal Anmerkungen zuvor in der Java-Methoden, die ich aufrufen aber ich kann Sie nicht arbeiten entweder.
Wie soll ich arbeiten mit Transaktionen auf CrudRepository ?
Oder bin ich mit völlig falschen Sache?
- Haben Sie versucht, den
@Query
annotation auf Ihre Methode ? Zum Beispiel :@Query("select a from [object] a where UPPER(a.[attr]) like UPPER(?1)")
? - würde die Abfrage Anmerkung erlauben Sie mir, transactionnal Operationen. Und mein Hauptproblem ist für Methoden impliziert CrudRepository wie speichern. Ich würde gerne warten, bis speichern ausgeführt werden, bevor ein findByPackageName.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich vorschlagen:
Überprüfen Sie Ihren Kontext und Konfiguration-Klassen mit @Configuration-annotation. Aus der Dokumentation:
Dann können Sie mit @Transactional in Ihre Dienstleistung auch in einem Verfahren
Hoffe es hilft
Neben crm86 beantworten Sie einige weitere Hinweise zu der @Transactional annotation:
Scheint es zu sein beste Praxis, um Anmerkungen versehen " den Eintrag Punkte in Ihre Anwendung (z.B. Ihr web-controller-Methoden oder die main-Methode einer geplanten batch). Durch die Verwendung der annotation Attribut TxType können Sie sicherstellen, dass Einschränkungen/Bedingungen in Methoden, die sich tiefer in Ihre Anwendung (z.B. TxType.OBLIGATORISCHE werfen würde, wenn keine trx-Kontext ausgeführt wird, etc.).
Die @Transactional-annotation hat nur einen Effekt, wenn die Klasse geladen wird als spring-bean (z.B. @Component-annotation auf Klassen-Ebene).
Denken Sie daran, dass nur RuntimeException ist, führen zu einem rollback. Wenn Sie möchten, eine checked Exception führt zu einem rollback haben Sie aufzuzählen, jede solche Ausnahme mit dem Attribut rollbackOn.
Die annotation auf Klassenebene ist gültig für alle öffentlichen Methoden dieser Klasse. Methode level-Annotationen überschreiben Sie diese in der Klasse. Die wiederholte Anmerkung in deinem Beispiel oben (zunächst auf Klassenebene, dann auf methodenebene) hat keine Wirkung.