tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
209
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Vatar Vatar ist offline Mitglied Brokat
    Registriert seit
    Feb 2004
    Ort
    Reykjavik
    Beiträge
    434
    Hallöle,

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

    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
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
        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
    Code java:
    1
    2
    3
    4
    
    ...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
     
    99% der Fehler befinden sich zwischen Stuhl und Tastatur

    Island

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

Ähnliche Themen

  1. dll referenzen
    Von DerStauner im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 25.04.09, 09:10
  2. Referenzen
    Von Nob im Forum PHP
    Antworten: 3
    Letzter Beitrag: 24.04.07, 20:34
  3. Roboter Referenzen
    Von Sneer im Forum 3D Studio Max
    Antworten: 3
    Letzter Beitrag: 10.10.06, 11:07
  4. VectorWorks 10 - Referenzen
    Von Yeehaa im Forum Vektor-Programme
    Antworten: 0
    Letzter Beitrag: 19.12.03, 11:51
  5. C Referenzen
    Von FactorX im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 01.05.02, 16:10