byto
29.07.2008, 10:00
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 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