Hibernate - Optimistic Locking umgehen

Hallo allerseits,

ich benutze Hibernate als OR-Mapper in einer Anwendung mit 3-Schicht-Architektur und Swing-Client als Frontend.
Die Hibernate-Objekte sind mit @Version für Optimistic Locking konfiguriert als Strategie zum nebenläufigen Bearbeiten von Datensätzen.

Sobald ein Client einen Datensatz speichern möchte, der bereits von einem anderen Client gespeichert wurde, fange ich die StaleObjectStateException und gebe einen Fehlerdialog aus, dass der Datensatz bereits von jemand anders bearbeitet wurde.

Nun möchte ich dem User aber die Möglichkeit bieten, den Datensatz trotzdem zu speichern. Leider sehe ich nicht, wie ich das Optimistic Locking von Hibernate umgehen kann, so dass ich einen Datensatz trotz veralteter Version speichern kann, ohne dass dabei eine Exception fliegt.

Eine Möglichkeit wäre, die Versionen händisch zu aktualisieren. Aber das erscheint mir recht umständlich bei größeren Objektgraphen, die mit Kaskadierung gespeichert werden. Ich müsste vor dem Speichern erst von jedem Objekt im Graph die Versionen aktualisieren.

Hat jemand ne Ahnung, ob Hibernate das auch automatisch kann? Im Hibernate Forum habe ich diese Frage auch schon gestellt, aber da hat keiner geantwortet. Ich kann mir nicht so ganz vorstellen, dass bisher keiner diesen Usecase hatte.

http://forum.hibernate.org/viewtopic.php?t=988892

TIA byto

Ich hab gerade mal ein wenig gegoogled und jetzt nix passendes zu Thema gefunden, ich geh mal davon aus Du hast ebenfalls schon die Suchmaschiene strapaziert, allerdings konnte ich in diversen Treffern lesen das man die Version beeinflussen kann, soll heißen verändern und zwar so das sie die nächsthöhere Version ist, vielleicht hilft Dir das?

Gut Schuß
VuuRWerK :wink:

Huhu,

ja ich glaube darauf wird es nun hinauslaufen, die Version selbst zu erhöhen. Das Thema ist im Moment noch nicht akut, aber ich werde beizeiten mal eine Lösung erarbeiten.

Trotzdem danke. :o)

Wenn Du das Problem beheben konntest, könntest Du, wenn möglich, kurz zusammenfassen wie es geht? Ich meine es ist doch eigentlich ein, wie ich denke, gängiges Problem mit dem überschreiben einer neuen Version mit einer alten. Würde mich interessieren wie es denn geht.

Ansonsten kann man ja mal ein Report an Hibernate schicken, dass das ein wünschenwertes Feature wäre. Sowas sollte IMHO von einem Framework unterstützt werden.

Gut Schuß
VuuRWerK :wink:

[QUOTE=VuuRWerK]Wenn Du das Problem beheben konntest, könntest Du, wenn möglich, kurz zusammenfassen wie es geht? Ich meine es ist doch eigentlich ein, wie ich denke, gängiges Problem mit dem überschreiben einer neuen Version mit einer alten. Würde mich interessieren wie es denn geht.
[/QUOTE]

Finde ich auch, am Besten wäre dazu ein Artikel im Wiki :wink:

Werde Euch auf dem Laufenden halten, wie ich das Problem gelöst habe. Derzeit bin ich aber noch mit anderen Dingen beschäftigt. :wink: