# [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank.



## Mr_Johnson (18. Apr 2012)

Hallo, ich bin fast kompletter Hibernate Anfänger. (Nur mal hier mal da ein paar Konzepte gehört)

Was habe ich vor:

Ich habe habe ein Tool, das an einen DB Server angebunden ist. Auf einem Rechner ändert ein Nutzer(A) etwas. Diese Änderung wird auf der Datenbank gespeichert. 

Auf einem zweiten Rechner hat ein anderer Nutzer(B) das von geänderte Objekte geöffnet, bevor A die Änderung gemacht hat. Jetzt soll B auf einen Button drücken können und dann die Änderungen von A angezeigt bekommen. 

Folgendes habe ich schon probiert: 
* session.refresh(...) => gibt entweder einen Stackoverflowerror oder eine unresolvedObjectException
* session.get(...) => keine Fehler, aber die Änderungen werden nicht angezeigt. 
* session.evict(...) und anschließend session.get(...) => Änderungen werden angezeigt, aber mein Kollege meint dass sei der falsche Weg. Weil ich dann zwei Objekte habe, die fachlich das gleiche repräsentieren. 

Hat jemand nen Tipp für mich? Mir reicht auch ne grobe Richtung, wo ich in der Hibernate Doku nach lesen soll. 

Danke


----------



## Andgalf (18. Apr 2012)

Die Stichworte hier sind pesimistic locking / opimistic locking

Chapter 11. Transactions and Concurrency


----------



## maki (18. Apr 2012)

(Optimistic) Locking wäre auch mein Vorschlag.

Ansonsten:


> * session.refresh(...) => gibt entweder einen Stackoverflowerror oder eine unresolvedObjectException


das sollte IME schon funktionieren.


----------



## Mr_Johnson (19. Apr 2012)

maki hat gesagt.:


> ...das sollte IME schon funktionieren.



Das zu modifizierende Objekt hat eine Liste von weiteren Objekten. 

* Der Stackoverflowerror tritt auf: 
	* Beide Nutzer haben das zu modifizierende Objekt geöffnet.
	* Nutzer B fügt der Liste von Objekten ein Objekt zu. (Vorher war die Liste leer)
	* Nutzer A aktualisiert. (Während der Aktualisierung wird session.refresh(...) aufgerufen)

* Die UnresolvedObjectException tritt auf:
	* Beide Nutzer haben das zu modifizierende Objekt geöffnet.
	* Das Objekt(1) enthält in seiner Liste ein Objekt(2).
	* Nutzer B entfernt das Objekt(2) von der Liste.
	* Nutzer A aktualisiert. (Während der Aktualisierung wird session.refresh(...) aufgerufen)


----------

