ďťż
 
[JDO] DetachCopy a relacja dwukierunkowa. ďťż
 
[JDO] DetachCopy a relacja dwukierunkowa.
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sulimczyk.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com