2016-04-21 3 views
0

Der Wunsch ist, OLE anstelle von SOSE zu fangen, um weniger fest an den Winterschlaf gekoppelt zu werden, falls wir jemals JPA-Provider ändern sollten.Wie kann ich eine OptimticLockException anstelle einer StaleObjectStateException in Hibernate 4 erhalten?

Der Fall, der die Ausnahme erzeugt, ist sehr einfach; Ich habe einen Breakpoint erstellt, bevor ein versioniertes Entitätsupdate festgeschrieben wurde, eine Änderung direkt in der Datenbank festgeschrieben und anschließend die Ausführung fortgesetzt.

Es sieht aus wie StaleObjectStateException vs OptimisticLockException, dass die Antwort nur "JPA-Anmerkungen verwenden" sollte, aber wir tun das. Insbesondere importiert die fragliche Entität Annotationen nur aus javax.persistence.

Antwort

0

Es stellte sich heraus, dass wir Hibernate-Session-Objekte anstelle von EntityManagers verwendeten - Hibernate prüft nicht auf JPA-Annotationen (und wickelt SOSEs in OLEs, wenn Sie sind vorhanden), es sei denn, ein EntityManager wird verwendet.

Wir können es nicht beheben, weil DropWizard Sitzungen verwendet, aber jetzt, wo wir verstehen, warum dies passiert und dass es konsequent passieren wird, können wir einfach die SOSE fangen und das Problem ist gelöst.

Verwandte Themen