Problem mit Referenzen

Vatar

Erfahrenes Mitglied
Hallöle,

auch auf die Gefahr hin dass es sich hierbei um einen totalen Anfängerfehler handelt...:rolleyes:

In meiner Anwendung lade ich zu beginn meine Daten mittels Hibernate in das Modell. Einzelne Objekte können in einem Editor geöffnet und bearbeitet werden. Da ich recht stark Mit Master- und Detailsseiten arbeite wird jede Änderung sofort in das Modell gespeichert und dem Benutzer angezeigt dass der Editor dirty ist. Speichert er das ganze wird alles in die DB geschrieben, will er aber nicht speichern so soll der Stand für das Objekt im Editor aus der Datenbank wiederhergestellt werden.

Das ganze mache ich im Moment so
Java:
	public void dispose(){
	if(isDirty){
		// editor is still dirty -> user doesn't want to save
		// restore the vehicle from database to get its persistent state
		Session session = RcpPlugin.getDefault().getNewSession();
		Transaction tx = session.beginTransaction();
		Vehicle a = (Vehicle)session.load(Vehicle.class, vehicle.getId()); 
		VehicleList.getInstance().getVehicleList().remove(vehicle);
		VehicleList.getInstance().getVehicleList().add(a);
		VehicleList.getInstance().fireModelChanged();
		tx.commit();
		session.close();
	}
	super.dispose();
}
Aber eigentlich sollte das ganze nur so aussehen
Java:
...session start...
vehicle = (Vehicle)session.load(Vehicle.class, vehicle.getId())
...session ende...
VehicleList.getInstance().fireModelChanged();
das sollte doch eigentlich ausreichen, da die Variable vehicle auch nur eine referenz auf das Objekt im Modell (VehicleList) ist. Die erste (sehr sehr unschöne)Variante funktioniert definitiv, die zweite nicht?

Weis jemand Rat?
Danke
 
Hallo,

ich kann dir keine Lösung sagen, aber ich kann dir erklären warum die 2. Variante nicht funktioniert.
Vehicle und ein Feld aus deiner Liste sind Referenzen auf ein Object im Speicher, d. h. änderst du mit einer Referenz was an dem Object, siehst du das bei der anderen Referenz auch. Du weist aber Vehicle ein neues Object zu, also zeigen Vehicle und die Referenz aus deiner Liste nicht mehr auf das gleiche Object, sonder auf 2 Verschiedene.

Ich hoffe das hilft dir mal weiter.

MFG

zEriX
 
Zurück