[Java lista] JPA ManyToMany

István Viczián viczian.istvan at gmail.com
2009. Okt. 19., H, 16:20:06 CEST


Nem néztem meg a deklarációkat, de nekünk akkor csinált ilyesmit, ha
két irányú kapcsolatunk volt, és nem volt beállítva mindkét irány.
Az update előtt szerintem próbáld meg ellenőrizni, hogy a memóriában
lévő objektumokon minden irányú referencia jól megvan-e.

Viczi

2009/10/19 Szomor Attila <aszomor at computertechnika.hu>:
> Sziasztok,
>
> Van 3 entitás és köztük egy kapcsoló entitás, a kapcsoló PlaceIntrc
> entitásban PlaceUseru mindig van, de hol a PlaceGroP, hol a PlaceClass
> null.
> Tulajdonképen két kapcsoló tábla kellene egy a PlaceUseru és a PlaceGroP,
> valamint egy másik a PlaceUseru és a PlaceClass közé, de hát ez az örökség.
> A környezet GlassFish, Toplink-Essential, PostgreSQL, látszólag minden jól
> működik amíg a GlassFish-t le nem kell állítani, akár napokig is jók a
> kapcsolatok.
> Azonban űjra indítás után a PlaceUseru-n történő első update-kor törli a
> PlaceIntrc rekordokat és így elvész a kapcsolat a táblák (entitások)
> között.
> (semmit nem teszünk az entitással, csak meghívjuk az upadte-ot).
>
> Van valami tippetek, mit kellene beállítani a JPA-ban, vagy láttok hibát
> az entitások definicióiban?
>
> Köszi, Attila.
>
>
> public class PlaceUseru implements Serializable {
> ...
>       // PlaceIntrc: Felhasználó - Ambulanciái kapcsolat
>       @ManyToMany(fetch = FetchType.LAZY)
>       @JoinTable(name ="place_intrc",
>         joinColumns = {@JoinColumn(name = "useru_use_int_id",
> referencedColumnName = "id")},
>         inverseJoinColumns = {@JoinColumn(name = "gro_p_gro_use_id",
> referencedColumnName = "id")}
>       )
>       private Collection<PlaceGroP> placeGroPCollection;
>
>       // PlaceIntrc: Felhasználó - Osztályai kapcsolat
>       @ManyToMany(fetch = FetchType.LAZY)
>       @JoinTable(name ="place_intrc",
>         joinColumns = {@JoinColumn(name = "useru_use_int_id",
> referencedColumnName = "id")},
>         inverseJoinColumns = {@JoinColumn(name = "class_cla_use_id",
> referencedColumnName = "id")}
>       )
>       private Collection<PlaceClass> placeClassCollection;
> ...
> }
>
>
> public class PlaceGroP implements Serializable {
> ...
>     // PlaceIntrc: Felhasználó - Ambulanciái kapcsolat
>     @ManyToMany(mappedBy="placeGroPCollection")
>     private Collection<PlaceUseru> placeUseruCollection;
> ...
> }
>
> public class PlaceClass implements Serializable {
> ...
>       // PlaceIntrc: Felhasználó - Osztályai kapcsolat
>       @ManyToMany(mappedBy="placeClassCollection")
>       private Collection<PlaceUseru> placeUseruCollection;
> ...
> }
>
> public class PlaceIntrc implements Serializable {
> ...
>       @JoinColumn(name = "gro_p_gro_use_id", referencedColumnName = "id")
>       @ManyToOne
>       private PlaceGroP groPGroUseId;
>
>       @JoinColumn(name = "useru_use_int_id", referencedColumnName = "id")
>       @ManyToOne(optional = false)
>       private PlaceUseru useruUseIntId;
>
>       @JoinColumn(name = "class_cla_use_id", referencedColumnName = "id")
>       @ManyToOne
>       private PlaceClass classClaUseId;
> ...
> }
> --
>
> LOG részlet :
> -------------
> Az Execute query DataModifyQuery() -> DELETE
> =============================================
>
> ------------------------
> [ctMedikaPersistenceUnit] Mon Oct 19 15:26:23 CEST 2009 [DEBUG]
> in com.ct.medika.persistence.units.PlaceUseruBean.updateEntity():
> started.
> ------------------------
> client acquired
> TX binding to tx mgr, status=STATUS_ACTIVE
> Merge clone with references
> com.ct.medika.persistence.entities.PlaceUseru[id=1]
> Register the existing object
> com.ct.medika.persistence.entities.ChltableChltable[id=53751]
> Register the existing object
> com.ct.medika.persistence.entities.ChltableChltable[id=53801]
> Execute query ReadAllQuery(com.ct.medika.persistence.entities.PlaceGroP)
> reconnecting to external connection pool
> SELECT t1.id, t1.grphn, t1.grpho, t1.created, t1.grcfl, t1.grcop,
> t1.grcfv, t1.grcom, t1.grmeg, t1.grmuh, t1.grbeh, t1.grflg, t1.grmoj,
> t1.grsma, t1.grtav, t1.grmin, t1.grjel, t1.grktg, t1.modified, t1.grnap,
> t1.grbed, t1.grpro, t1.grkts, t1.grmh2, t1.uid, t1.gramb, t1.grnks,
> t1.gregy, t1.grepo, t1.grnel, t1.grtps, t1.grint, t1.taprep_tap_doc_id,
> t1.place_intez_id, t1.class_clagro_id, t1.chltable_chltable_boos_grjel_id,
> t1.chltable_chltable_boss_grtip_id, t1.chltable_chltable_boss_grmin_id
>  FROM place_intrc t0, place_gro_p t1 WHERE ((t0.useru_use_int_id = ?) AND
> (t1.id = t0.gro_p_gro_use_id))
>         bind => [1]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.AmbulatKilat)
> reconnecting to external connection pool
> SELECT id, modified, kiambukod, created, uid, place_gro_p_id FROM
> ambulat_kilat WHERE (place_gro_p_id = ?)
>         bind => [452]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceIntez)
> reconnecting to external connection pool
> SELECT id, inusr, inflg, uid, intsz, modified, inbed, innam, inbln, inado,
> infin, inadr, inpfr, inbis, incod, inmen, incit, inmal, created, inurl,
> inpho, intbk FROM place_intez WHERE (id = ?)
>         bind => [53]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.ChltableChltable)
> reconnecting to external connection pool
> SELECT id, szoveg, inflg, uid, szekcio, bejegyz, modul, modified, created
>  FROM chltable_chltable WHERE (id = ?)
>         bind => [56401]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceGroP[id=452]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceIntez[id=53]
> Register the existing object
> com.ct.medika.persistence.entities.ChltableChltable[id=56401]
> Execute query ReadAllQuery(com.ct.medika.persistence.entities.TaprepTapDoc)
> reconnecting to external connection pool
> SELECT id, modified, mhcod, uid, tbdoc, created, place_useru_id FROM
> taprep_tap_doc WHERE (place_useru_id = ?)
>         bind => [1]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceUseru)
> Register the existing object
> com.ct.medika.persistence.entities.TaprepTapDoc[id=1]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceUseru[id=1]
> Execute query ReadAllQuery(com.ct.medika.persistence.entities.PlaceClass)
> reconnecting to external connection pool
> SELECT id, clsta, cldin, uid, clusr, modified, clint, clnam, crepo, clflg,
> cnovo, clflag, clcod, clsma, created, cladr, ctype,
> chltable_chltable_boss_ctype_id, place_useru_id, place_intez_id FROM
> place_class WHERE (place_useru_id = ?)
>         bind => [1]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.ChltableChltable)
> reconnecting to external connection pool
> SELECT id, szoveg, inflg, uid, szekcio, bejegyz, modul, modified, created
>  FROM chltable_chltable WHERE (id = ?)
>         bind => [55351]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceUseru)
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceIntez)
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.ChltableChltable)
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceUseru)
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceIntez)
> Register the existing object
> com.ct.medika.persistence.entities.PlaceClass[id=102]
> Register the existing object
> com.ct.medika.persistence.entities.ChltableChltable[id=55351]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceUseru[id=1]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceIntez[id=53]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceClass[id=52]
> Register the existing object
> com.ct.medika.persistence.entities.ChltableChltable[id=55351]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceUseru[id=1]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceIntez[id=53]
> Execute query ReadAllQuery(com.ct.medika.persistence.entities.PlaceSzakm)
> reconnecting to external connection pool
> SELECT id, modified, uszak, created, uid, codes_szakma_id,
> useru_use_szk_id FROM place_szakm WHERE (useru_use_szk_id = ?)
>         bind => [1]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.CodesSzakma)
> reconnecting to external connection pool
> SELECT id, modified, szak_code, uid, szak_name, szak_flg, created FROM
> codes_szakma WHERE (id = ?)
>         bind => [51]
> Execute query
> ReadObjectQuery(com.ct.medika.persistence.entities.PlaceUseru)
> Register the existing object
> com.ct.medika.persistence.entities.PlaceSzakm[id=2]
> Register the existing object
> com.ct.medika.persistence.entities.CodesSzakma[id=51]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceUseru[id=1]
> Execute query ReadAllQuery(com.ct.medika.persistence.entities.PlaceClass)
> reconnecting to external connection pool
> SELECT t1.id, t1.clsta, t1.cldin, t1.uid, t1.clusr, t1.modified, t1.clint,
> t1.clnam, t1.crepo, t1.clflg, t1.cnovo, t1.clflag, t1.clcod, t1.clsma,
> t1.created, t1.cladr, t1.ctype, t1.chltable_chltable_boss_ctype_id,
> t1.place_useru_id, t1.place_intez_id FROM place_intrc t0, place_class t1
> WHERE ((t0.useru_use_int_id = ?) AND (t1.id = t0.class_cla_use_id))
>         bind => [1]
> Register the existing object
> com.ct.medika.persistence.entities.PlaceClass[id=102]
> TX beginTransaction, status=STATUS_ACTIVE
> Execute query
> UpdateObjectQuery(com.ct.medika.persistence.entities.PlaceUseru[id=1])
> Execute query DataModifyQuery()
> reconnecting to external connection pool
> DELETE FROM place_intrc WHERE ((gro_p_gro_use_id = ?) AND
> (useru_use_int_id = ?))
>         bind => [452, 1]
> Execute query DataModifyQuery()
> DELETE FROM place_intrc WHERE ((class_cla_use_id = ?) AND
> (useru_use_int_id = ?))
>         bind => [102, 1]
> ------------------------
> [ctMedikaPersistenceUnit] Mon Oct 19 15:26:23 CEST 2009 [DEBUG]
> in com.ct.medika.persistence.units.PlaceUseruBean.updateEntity():
> com.ct.medika.persistence.entities.PlaceUseru[id=1] updated.
> ------------------------
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról