Festlegen der Isolationsstufe in der @Transactional "READ_UNCOMMITTED". Ich verwende EclipseLink 2.5.1-RC1
Habe ich eine Anforderung zum starten neue Transaktion innerhalb einer Laufenden Transaktion, so dass eine Ausnahme in der 2. Transaktion wird rollback nur neue Transaktion nicht die alte.
Diese mache ich durch die Einstellung Vermehrung Attribut in der 2. Transaktion wie diese:
@Transactional(propagation = Propagation.REQUIRES_NEW)
Diese eine neue Transaktion angelegt, aber die neue Transaktion zu Lesen, einige nicht gespeicherte Daten der ersten Transaktion (dirty read), und auch die Daten aktualisieren. Dies versuche ich zu tun, indem Sie die Einstellung isolation-Attribut, wie :
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation=Isolation.READ_UNCOMMITTED)
Löst dies eine Ausnahme - InvalidIsolationLevelException, nämlich "Standard-JPA nicht unterstützt benutzerdefinierte Isolationsstufen verwenden eine spezielle JpaDialect für Ihre JPA-Implementierung".
Kann jeder mir helfen zu implementieren JpaDialect? Ich bin mit Eclipse Link 2.5.1 .
Oder kann ich irgend wie in der Nähe der ersten Transaktion, bevor eine neue Transaktion gestartet? Seit der Ersten Transaktion ist geschlossen, die Zweiten haben kein problem beim Lesen der Daten verpflichtet, die von der Ersten Transaktion.
- Gibt es eine Möglichkeit, ich kann das explizite schließen einer Transaktion, gestartet von @Transactional-annotation innerhalb dieser Methode selbst??
- möglich, Duplikat der Spring-verwaltete Transaktionen, EclipseLink JPA, benutzerdefinierte isolation level
Du musst angemeldet sein, um einen Kommentar abzugeben.
In JPA können Sie versuchen, somehting wie diese, nicht viel gewissen wie Sie zu erreichen ist ähnlich wie in EclipseLink/Frühjahr.
Aber das Gesamt-Konzept könnte gleich bleiben, Holen Sie sich die zugrunde liegende Datenbank-Verbindung & set-geeignete isolation level.
Danach, vielleicht möchten Sie aber auch zurücksetzen, um das isolation-level auf den Standardwert zurück.
Wenn Sie keine änderungen vornehmen möchten, dann müssen Sie vielleicht zu implementieren
JpaDialect
überschreiben von Methoden für die änderung für die Isolationsstufe der Transaktion.Finden Sie hier beschreibt die Umsetzung für Ruhezustand, können versuchen, ähnliche für EclipseLink.