Rejtélyes JPA bugok

Fórumok

Üdv,

Az utóbbi időben pár rejtélyes JPA érdekességre akadtam rá, és nem tudom mi lehet az oka:
1. Néha kapok IllegalStateException-t, miszerint olyan entitást akarok refreshelni, ami nincs menedzselve.
Namármost, az EntityManager-t soha nem clear()-elem a kérdéses kódban, így nem tudnak nem menedzseltek lenni az entitásaim. Ez miért lehet mégis?
2. Néha kapok olyan exceptiont, miszerint talált olyan új objektumot reláción keresztül, amire nincs megadva Cascade Type. Mindenhol meg van adva Cascade.ALL, de segond. Mi lehet a probléma?
JPA providernek EclipseLink 2-t használok.

Updatek:

A kovetkezo problema lepett fel:
"Caused by: Exception [EclipseLink-6044] (Eclipse Persistence Services - 2.1.0.v20100614-r7608): org.eclipse.persistence.exceptions.QueryException
Exception Description: The primary key read from the row [DatabaseRecord(
=> 17
=> Bridge
=> 1813
=> 96294)] during the execution of the query was detected to be null. Primary keys must not contain null.
"

Valaki segithetne megmondani, melyik mezo a null.....mert en nem latom.

Hozzászólások

"Namármost, az EntityManager-t soha nem clear()-elem a kérdéses kódban, így nem tudnak nem menedzseltek lenni az entitásaim. Ez miért lehet mégis?" Az EJB 3 óta van olyan állapota az entitásnak, amikor kikerül a perzisztencia kontextusból, és hagyományos DTO-ként viselkedik. Az ilyen entitásokat előbb újra perzisztálni kell ahhoz, hogy az EntityManager tudjon mit kezdeni vele.

java'nother blog

Jogos, nem írtad, hogy ejb projekt. A válasz egyébként igen, mivel az ejb konténer függőség-injektálással csak referenciát szerez az aktuális JPA implementációra (EntityManagerre), tehát az Entitás 4 életciklusát (új, menedzselt, törölt, lecsatolt) a JPA kezeli.

java'nother blog