# DB4o Attribute hinzufügen



## pl4gu33 (16. Okt 2011)

hey,.. ich habe eine Frage, zu einem Klassen Attribut Update... 

wenn ich einer Klasse ein Attribut z.b. ein Boolean dazu gebe, ist es ja kein Problem den richtigen Wert bei neuen Speicherungen mitzuspeichern..... wie aber gebe ich den bereits vorhandenen Speicherständen den richtigen Wert... das Problem ist, dass die Variable direkt mit "false" initalisiert wird, wenn sie noch nicht vorhanden ist, ich will aber dass sie mit True initailisiert wird.... aber da bei dem Aufruf kein Konstruktor benutzt wird, kann ichs leider nicht ändern....also Beispiel :


```
Query query = this.db.query();
        query.constrain(MeineKlasse.class);
        ObjectSet<MeineKlasse> result = query.execute();
        for (MeineKlasse current : result){
           current .getBoolean();	
        }
```

hier wird halt bei alten Daten, mein neues Attribute sofort auf "false" initalisiert, da sie das Attribut ja vorher noch nicht hatten, aber wie kann ich es machen, dass es als "True" bei alten Daten gesetzt wird?

im Moment löse ich das Problem so, dass ich alles anderes rumsehe, dass sozusagen False bei mir True ist und True bei mir False.... da so dann alle alten Spielstände auf "True" realisiert werden aber das ist irgendwie ne nicht so tolle Lösung 

ich hoffe mein Problem ist verständlich geworden 
ps. ich bin noch neu im DB4o Bereich und versuch mir gerade einzuarbeiten 
wäre auch über Links zu meinem Problem glücklich


----------



## SlaterB (17. Okt 2011)

falls es um eine Datenbank geht: du kannst in der Datenbank die Daten ändern?!

in Java kannst du ein Instanzattribut boolean mit = true initialsieren,
und schließlich noch ganz normal zur Laufzeit ändern, setter-Methode schon gehört?


----------



## pl4gu33 (17. Okt 2011)

SlaterB hat gesagt.:


> falls es um eine Datenbank geht: du kannst in der Datenbank die Daten ändern?!
> 
> in Java kannst du ein Instanzattribut boolean mit = true initialsieren,
> und schließlich noch ganz normal zur Laufzeit ändern, setter-Methode schon gehört?



da hat wohl einer nen schlechten Morgen erwischt ? 

okay, ich sehe mein Problem kam nicht ganz an 

es geht darum, wie ich in der DB4o (Objekt Datenbank!!) Daten direkt in der DB ändere (ob das überhaupt geht,soweit ich das sehe geht nämlich nicht!), weil ich finde nur Beispiele in den Daten, die man updaten will direkt mit dem qry oben rausholt und dann ändert und wieder stored... die alten Spielstände haben aber das neue Attribute NICHT und beim Laden wird dieses "nicht vorhandene" Attribute automatisch false gesetzt! Ich will aber, dass es am Anfang true gesetzt wird... das Ding ist, dass es direkt beim Laden aus der DB auf "FALSE" Initalisiert wird,ein String würde mit "" initalisiert werden und ein Int auf 0. Und ich will erreichen, dass die Objekte, die das Attribut noch nicht haben, nen "True" bekommen.... und nein ich kann da keine Setter oder sonst wie benutzen, weil mir mein "nicht vorhandenes" Attribut direkt beim Laden auf FALSE gesetzt wird und ich könnte es dann nicht mehr von den Objekten unterscheiden, welche wirklich FALSE sein sollen

im Moment habe ich einfach alles umgedreht,.... dass alles was True is False is da es dann passt, da die alten Spielstände mein "True" bekommen.... bloß finde ich diese Lösung doof und wills wenn richtig lösen ^^

ps. es wird auch kein Konstruktor oder sonst was benutzt, in dem ich das ändern könnte, dass es mit false initalisiert wird.... und nein direkte Initalisierung bringt nix wenn ich Attribute=true mache


----------



## maki (17. Okt 2011)

Laut Doku verhält sich das autom. Refactoring so wie von dir beschrieben, bei Altdaten werden Defaultwerte genutzt:
Automatic refactoring

Für dich ist wohl die refactoring API das richtige:
Refactoring API

Empfehle dir die Doku zu lesen, vor allem wenn dir ein bestimmtes Framework/API/Sprache neu ist, und ja, ist lang für 'RTFM'


----------



## pl4gu33 (17. Okt 2011)

maki hat gesagt.:


> Laut Doku verhält sich das autom. Refactoring so wie von dir beschrieben, bei Altdaten werden Defaultwerte genutzt:
> Automatic refactoring
> 
> Für dich ist wohl die refactoring API das richtige:
> ...



jop das hilft mir weiter, wie gesagt ich bin da noch am Anfang bei der Doku (Basics),...aber das Thema hat mich halt interessiert und ich hab nach was anderem gesucht, darum wohl nix gefunden 
vielen Dank


----------



## maki (17. Okt 2011)

So wie ich das sehe muss man wirklich jede Persistente Instanz anfassen und abändern, nur eben nicht in SQL Scripts, sondern mit Javacode, vornehmlich in Schleifen.


----------

