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
signature.asc
Description: This is a digitally signed message part.
