DerGrinsemann
Mitglied
Hallo!
Mein Gehirn nähert sich einem geistigen Kurzschluss, seit Tagen brüte ich über folgendes Szenario und ich komme einfach nicht weiter:
Frameworks:
- Spring-Framework 2.x
- Hibernate 3.x
Aufbau:
Controller - Service - DAO - Domain
Auf allgemeines Anraten (Bücher, Forum usw) reiche ich meine Domain-Objekte durch alle Schichten durch und verzichte auf DTO's.
In meinem Übungsbeispiel arbeite ich mit den Domain-Objekt Person.
Benutzer 1:
Benutzer 2 (in der Zwischenzeit):
Was mache ich jetzt mit Benutzer 1?
Wo ist mein Knoten, meine Blockade, ... ?
Oder anders gefragt: Wie bringe ich vernünftig ein Domain-Objekt mit den Status "detached" in den Status "persitent"?
Marco
Mein Gehirn nähert sich einem geistigen Kurzschluss, seit Tagen brüte ich über folgendes Szenario und ich komme einfach nicht weiter:
Frameworks:
- Spring-Framework 2.x
- Hibernate 3.x
Aufbau:
Controller - Service - DAO - Domain
Auf allgemeines Anraten (Bücher, Forum usw) reiche ich meine Domain-Objekte durch alle Schichten durch und verzichte auf DTO's.
In meinem Übungsbeispiel arbeite ich mit den Domain-Objekt Person.
Benutzer 1:
- wählt einen Eintrag (Person) zur Bearbeitung aus (SimpleFormController, formBackingObject gibt das Domain-Objekt zurück)
- Der Benutzer ändert etwas (z.B. Vorname) oder auch gar nix
- Somit lande ich im SimpleFormController, onSubmit und konventiere wieder in "Person person = (Person) object;"
- Jetzt habe ich ein Domain-Objekt person das Detached ist
Benutzer 2 (in der Zwischenzeit):
- löscht den selbigen Eintrag (diese Person war ihn immer schon unsympathisch ;-) )
- Somit ist dieses Domain-Objekt person also Transient
Was mache ich jetzt mit Benutzer 1?
- update: geht nicht (führt IMMER ein update aus, auch wenn keine Änderungen stattgefunden haben und erhöht mir meinen version-Zähler (optimistische Sperre), bzw. existiert das Objekt ja auch nicht mehr in der DB)
- save: geht nicht (da Benutzer 1 nichts von der Löschung weiss)
- saveOrUpdate, merge: geht nicht (wäre zwar OK für Benutzer 1, aber für Benutzer 2 taucht der gerade gelöschte Datensatz wieder auf)
- get, update: sehr umständlich, ich hole mir mittels get und der ID das selbe Objekt (somit Persistent) oder erhalte null und kann darauf reagieren. Kopiere alle Eigenschaften vom Detached-Objekt in das Persitent-Objekt um und mache ein update auf das Persistent-Objekt. Das wäre übrigends das DTO-Pattern.
Wo ist mein Knoten, meine Blockade, ... ?
Oder anders gefragt: Wie bringe ich vernünftig ein Domain-Objekt mit den Status "detached" in den Status "persitent"?
Marco
Zuletzt bearbeitet: