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

Bartuszek Viktor bartu at rhodeus.hu
2011. Feb. 8., K, 21:27:44 CET


2011.02.08. 21:05 keltezéssel, Mariák Kálmán írta:
> On Tue, 2011-02-08 at 20:21 +0100, Auth Gábor wrote:
>>    Hja, ha mindkét oldalon van set, akkor neked kell kezelni mindkét
>> bean
>> esetén... eddig csak az egyik oldalon állítottad be. Csoda nem fog
>> történni,
>> hogy beállítódjön mindkettő bean-ben. :)
> No de a persist-ek után egy findById metódussal (JPQL) olvasom újra ki
> az entitást.
Nem jelent semmit. jpa előszedte az entitást (vagy "megjegyezte" persist 
esetén) és kész.
Az utána not managed állapotba kerül, és nem foglalkozik a frissen 
tartásával, neked kell róla gondoskodnod.
Kérsz egy példányt, van neki, odaadja (de nem frissíti). Próbáld ki, 
nagyrészt a már kikért entitások újra keresésénél el sem jut a db-ig a 
query-d. Ezért kell újra managelt-é tenni merge-el. Eclipse debug-ja 
gyönyörűen mutatja is ezt egyébként, mikor egy változód tartalma 
változik, sárga lesz, kövesd le ezeket, hogy mikor történik valóban 
értékadás ezek esetén.

> userExtension.setUser(user); Ez a sor azért kell, hogy a kapcsolat létre
> tudjon jönni a két entitás között. A user-ből igazából csak a userId
> kell.

Ez csak akkor igaz, amikor kikéred a user-t a db-ből. Ha van referenciád 
egy meglévőre (egyértelműen nem akármelyikre :D), azt fogod kapni, mint 
fentebb írtam, jpa nem fogja a kapcsolatokat lekövetni, ha külön nem 
kéred erre.
> Az első osztályban meghívott userDao.findUserById metódus tartlama:
> @Override
> public User findUserById(Long id) {
>    Query q = em.createQuery("SELECT u FROM User u WHERE u.id = :id");
Erre van az em.find metódus, felesleges megírnod :)

<T> T find(Class<T> entityClass,
            Object primaryKey)

http://download.oracle.com/javaee/5/api/javax/persistence/EntityManager.html#find%28java.lang.Class,%20java.lang.Object%29

Remélhetőleg nem írtam túl nagy baromságokat, én így tapasztaltam, így 
aztán nagyon könnyen előfordulhat, hogy nem így van :)

v


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