[JDO] DetachCopy a relacja dwukierunkowa.
Jan Słupicki - 25-03-2006 01:21
[JDO] DetachCopy a relacja dwukierunkowa.
Postanowiłem się nauczyć JDO. W sumie wszystko ładnie i pięknie a moja pierwsza wprawka zaczęła działać praktycznie bez większych problemów. Natrafiłem jednak na problem gdy robiłem detachCopy obiektu powiązanego z drugim relacją dwukierunkową. Mam dwie klasy 'CzlowiekBean' i 'AdresBean' gdzie każdy człowiek ma listę adresów a każdy adres ma człowieka do którego należy. Jak robię detachCopy człowieka to poza transakcją ma on poprawne wszystkie pola, także adresy ale jak wezmę jakiś jego adres i chcę się dobrać do pola człowiek tego adresu to wtedy dostaję: --- javax.jdo.JDODetachedFieldAccessException: You have just attempted to access field "czlowiek" yet this field was not detached when you detached the object. Either dont access this field, or detach the field when detaching the object. --- Nie potrafię się tego pozbyć. Nie wiem jak zrobić "... or detach the field when detaching the object.". Próbowałem robić "ręcznie" detachCopy pola 'czlowiek' w każdym adresie przed i po każdego detachCopy głównego obiektu ale nie robiło to różnicy.
-- Jan Słupicki
Jan Słupicki - 25-03-2006 01:21
Acha - próbowałem kombinować z fetchGroups ale nie robiło to różnicy.
-- Jan Słupicki
Jan Słupicki - 25-03-2006 01:22
> Acha - próbowałem kombinować z fetchGroups ale nie robiło > to różnicy.
Pomogło jak ustawiłem parametr 'javax.jdo.option.DetachAllOnCommit' na true. Jednak byłbym wdzięczny jakby ktoś mi wytłumaczył dlaczego bez tego nie działało i jak bez powyższego rozwiązuje się ten problem.
-- Jan Słupicki
Marcin Malinowski - 27-03-2006 00:09
Jan Słupicki wrote: > Jednak byłbym wdzięczny jakby ktoś mi wytłumaczył dlaczego bez tego > nie działało i jak bez powyższego rozwiązuje się ten problem. >
A mógłbyś wrzucić plik z metadanymi ?
Jan Słupicki - 27-03-2006 00:09
Użytkownik "Marcin Malinowski" <mmalinowski@vp.pl> napisał w wiadomości news:e05rra$1nh$1@news.onet.pl... > Jan Słupicki wrote: >> Jednak byłbym wdzięczny jakby ktoś mi wytłumaczył dlaczego bez tego >> nie działało i jak bez powyższego rozwiązuje się ten problem. >> > > A mógłbyś wrzucić plik z metadanymi ?
Jeśli chodzi o to czy dałem 'datachable="true"' to dałem. Dodałem ostatnio jeszcze klasę Dokument z dokumentami aby przetestować jak sobie radzi danymi binarnymi (pole skan) i typem Enum (pole typ) - ale to są chyba rozszeżenia JPOX-a a nie standard JDO.
<jdo> <package name="beans"> <class name="Czlowiek" detachable="true"> <datastore-identity strategy="identity" /> <field name="adresy" mapped-by="czlowiek"> <collection element-type="beans.Adres" /> </field> <field name="dokumenty" mapped-by="czlowiek"> <collection element-type="beans.Dokument" /> </field> </class> <class name="Adres" detachable="true"> <datastore-identity strategy="identity" /> </class> <class name="Dokument" detachable="true"> <datastore-identity strategy="identity" /> <field name="typ" persistence-modifier="persistent" serialized="false"> </field> <field name="skan"> <array /> </field> </class> </package> </jdo>
Kod klas (bez getterów i setterów): public class Czlowiek { private String imie; private String nazwisko; private int wiek; private List<Adres> adresy; private List<Dokument> dokumenty; } public class Adres { private String ulica; private String miasto; private String kodPocztowy; private Czlowiek czlowiek; } public class Dokument { private String numerId; private TypDokumentu typ; // public enum TypDokumentu { DOWOD, PRAWO_JAZDY, PASZPORT, INNE } private byte[] skan; private Czlowiek czlowiek; }
-- Jan Słupicki
Marcin Malinowski - 27-03-2006 00:09
Jan Słupicki wrote: > > > Jeśli chodzi o to czy dałem 'datachable="true"' to dałem. > Dodałem ostatnio jeszcze klasę Dokument z dokumentami > aby przetestować jak sobie radzi danymi binarnymi (pole skan) > i typem Enum (pole typ) - ale to są chyba rozszeżenia JPOX-a > a nie standard JDO. >
hmm, no mimo wszystko zostawilbym fetch group w metadanych. A ustawiles setMaxFetchDepth na wiecej poziomow i addGroup na interesujace ciebie grupy ?
Jan Słupicki - 27-03-2006 00:09
> hmm, no mimo wszystko zostawilbym fetch group w metadanych. A ustawiles > setMaxFetchDepth na wiecej poziomow i addGroup na interesujace ciebie > grupy ?
Fetch grupy ustawiałem ale ponieważ wydawało się że nie wpływają na działanie programu to usunąłem. Natomiast setMaxFetchDepth nie dotykałem. Zaraz sprawdzam ... To działa ! :-) Zmodyfikowałem mapowanie: <jdo> <package name="beans"> <class name="Czlowiek" detachable="true"> <datastore-identity strategy="identity" /> <field name="adresy" mapped-by="czlowiek" default-fetch-group="true"> <collection element-type="beans.Adres" /> </field> <field name="dokumenty" mapped-by="czlowiek" default-fetch-group="true"> <collection element-type="beans.Dokument" /> </field> </class> <class name="Adres" detachable="true"> <datastore-identity strategy="identity" /> <field name="czlowiek" default-fetch-group="true"/> </class> <class name="Dokument" detachable="true"> <datastore-identity strategy="identity" /> <field name="typ" persistence-modifier="persistent" serialized="false"/> <field name="skan"> <array /> </field> <field name="czlowiek" default-fetch-group="true"/> </class> </package> </jdo> i dałem pm.getFetchPlan().setMaxFetchDepth(2); I działa teraz bez problemu. Dzięki.
-- Jan Słupicki
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?q?Relacje_uwzgl=EAdniaj=B1ce_czas_(jak=3F)?=
=?iso-8859-2?q?Zachowanie_integralno=B6ci_relacji_=22wiele_do _wiele=22?=
=?iso-8859-2?q?Jak_si=EA_robi_insert_do_tabel_z_relacj=B1_1:1 ?=
Lista =?ISO-8859-2?Q?uporz=B1dkowana?= w relacji
2 tabele w relacji 1 do wielu - tylko jeden wiersz
[MySQL 4.1] relacja 1:n jako tekst oddzielony przecinkami
Czy stosuje sie relacje bez wymuszania wiezow integralnosci?
[TEORIA BD] Wyznaczanie kluczy relacji .
[MySql] pytanie o relacje, JOIN
Screen Grabber [taki, ze..]
zanotowane.pldoc.pisz.plpdf.pisz.plsulimczyk.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|