Hirdetés

Keresés

Új hozzászólás Aktív témák

  • floatr
    veterán

    spring JPA tesztelgetés_
    Van egy junit teszt class, ahol az egyik tesztben létrehozok B entityt, amit egy A entitybe illesztek (onetoone, lazy, nem cascade kapcsolat), és save a repoval.
    Aztán, ha ezt le akarom kérdezni findAll-al az A entityket amihez ugye tartozik a B entity is, akkor exception: no session.
    Ha Cascade.ALL-on van akkor nincs hiba. Ahogy akkor sem, ha a lekérdezős metódus springes @Transactional.
    Nem értem, hogy hova tűnik a session? Mi köze egy független select-nek tranzakciókhoz?

    Amikor meghívod a lekérdezést a Repository metódusban, az elkér egy aktuális sessiont az EntityManager-től. Mivel lazy, azon a ponton nem oldja fel a hivatkozást, csak egy B proxy-t kap az A objektum. Amikor visszakapod A-t, a session már ment a lecsóba, és hiába hívod meg a gettert, a proxy már nem találja a session-t.
    Na többek között erre is való a @Transactional, mert megmondja az EntityManager-nek, hogy hol kezdődik a session lifecycle. Ha nincs @Transactional, akkor a Repository metódusban kéne inícializálni a lazy relációkat.

Új hozzászólás Aktív témák