Dne Thursday 18 of October 2007 22:57:07 Karel Tejnora napsal(a):
> db4o
> programovani jednoduche - zadne mapy, zadne specialni programovani. Na
> co jsem narazil asi pred rokem a co znamenalo stopku jsou upravy
> atributu vlastnosti objektu a uz se databaze nedala precist. Nevim jak
> je na tom ted, ale asi lepe.

Tohle resi zapis verze objektu, pak se daji data upgradovat.

Mne ale vice rozciluje spousta veci, ktere si musite dodelat sam. Anotace pro 
ID zaznamu (protoze jinak budete tezko dohledavat editovany objekt ve 
webaplikaci).

Annotace pro Lazy - na Db4o se to menuje deap activation a da se nastavovat 
pro kazdy parametr tridy v configu, ale logictejsi je pouziti annotace.

Annotaci pro UniqueConstraint. Zase exstije zpusobm jak to udelat, ale musite 
to nastavovat v configu, jako anotace u tridy to neni. Nicmene ani tak 
neudelate unikatni slozeninu vice policek (musite si to naprogramovat sam). A 
pro jedine policko to funguje jenom v pripade ze se jedna o primitivni typ, 
nebo typ, ktery je defaultne v JDK, vas vlastni typ to nesezere, a je jedno, 
jeslti mate hashCode, equals a toString predefinovane.

No a pak je tu oproti Hibernate trochu magie ohledne editace objektu. V 
hibernate pokud mate ID stejne, jedna se o stejny objekt, takze pri save se 
updatuje. V db4o se na ID objektu neohlizi, takze musite objekt nacist a u 
neho zmenit udaje. Coz je u webovek trochu slozitejsi.

Jinak save funguje na objekt s jeho "primitivnima" promenyma a promenyma, 
ktere maji "obycejny" typ (String, Date atp.), ale kolekce a vlastni typy je 
potreba ukladat samostatne. Tedy jakoukoli kolekci je pri zmene potreba 
explicitne ulozit. No a pokud v objektu ktery ste nacetl zmenite parametr tak 
ze do neho setnete nejaky novy objekt, pak je taky nad tim potreba vyvolat 
explicitne metodu set: 

Tohle funguje super:
member = new Member 
member.setAddresa(novaAddresa); 
objectContainer.set(member);

Tohle ale nefunguje, protoze Member si porad pamatuje odkaz na starou adresu
member = dao.getMember(); // tim vratim existujiciho membera z databaze
member.setAddressa(novaAddressa);
objectContainer.set(member);

Je nutne vyvolat:
objectContainer.set(member.getAddressa());

jinak se data z adresy neulozi, nebo je poteba prepisovat jiz existujici 
objekt, coz je docela opruz. Takze idealni je udelat annotaci, ktera vsechny 
problematicke parametry automaticky uklada.

Ale jinak sem na dalsi problemy nanarazil.
-- 
Lukas Benda

Attachment: signature.asc
Description: This is a digitally signed message part.

Odpovedet emailem