[Java lista] Spring/Eclipselink - izolációs szintek

Mariák Kálmán sirkalmi at kalmiesemese.hu
2011. Feb. 9., Sze, 10:02:13 CET


Sziasztok!

Köszönöm, azt hiszem most már értem a működését! Nem ezt a működést
vártam, azt képzeltem, hogy ha egy entitás menedzselt státuszba kerül
(pl persist vagy merge után) akkor úgymond online kapcsolatba kerül az
adatbázissal és minden adatot szolgáltat ami az adatbázisban elérhető. 

Ha az entitás egy JPQL lekérdezés során kerül menedzselt státuszba akkor
szolgáltatja is szépen az adatokat, nem kell nekem "setelgetni" a
kapcsolatokat, azonban az én esetemben arról lehet szó, mint ahogyan
írtad is, hogy menedzselt státuszba persist vagy merge után került az
entitás és az ezt követő JPQL lekérdezés során nem fordul az
adatbázishoz, hanem cache-ből szolgáltatja a választ amiben viszont
nincsenek a kapcsolatok "besetelve".

Azonban, ha ezt a feltételezést elfogadom akkor miért nem működött a
JPQL lekérdezésem azon módosítása, melyben a cache kezelést kikapcsolom?
query.setHint("cacheUsage", ObjectLevelReadQuery.DoNotCheckCache);
Hiába állítottam be a fenti sort a tünet ugyanaz volt az indító
levelemben bemutatott esetben. Hogyan tudom az EntityManager-t
rákényszeríteni, hogy forduljon ismételten az adatbázishoz? Az
em.refresh() metódus miért mondja persist és merge után, hogy "Entity no
longer exists in the database"? Ez azt jelenti, hogy az entitás már nem
létezik az adatbázisban. Ezt hogy kell érteni?

Válaszokat nagyon köszönöm, nem is tudom mihez kezdenék nélkületek! ;-)

Mariák Kálmán
sirkalmi

On Tue, 2011-02-08 at 21:26 +0100, Auth Gábor wrote:
> Az első esetben a user.setExtension(userExtension) nem került
> meghívásra, az értéke null lesz. Ha lekérdezed a userExtension
> értékét, akkor persze, hogy meglesz, az em.persist nem befolyásolja
> érdemben az entitás bean-ek tartalmát, leszámítva az @Id feltöltését.
>
> Nem, ezzel csak az egyik irányt állítod be. Amikor valamikor később
> beolvasod az entitást, akkor lehet, hogy feltölti a JPA mindkét
> oldalt, de amikor lemented, akkor neked kell gondoskodni az
> összerendelésekről.
> 
> 
> A findById tipikusan cache-ből tölti be az entitás bean-t, tehát nem
> fogja feltölteni a JPA azokat a mezőket, amelyeket nem töltöttél fel.




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