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

Mariák Kálmán sirkalmi at kalmiesemese.hu
2011. Feb. 8., K, 21:05:59 CET


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.
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.
em.persist(user); Letárolja a user-t.
em.persist(userExtension); Letárolja a userExtension-t.
user.setExtension(userExtension); Ez a sor milyen hatással van a későbbi
JPQL lekérdezésre??
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");
  q.setParameter("id", id);
  try {
    return (User) q.getSingleResult();
  } catch (NoResultException e) {
    return null;
  }
}

> Beállítottad valahol, hogy userExtension.setUser(user), aztán később 
> lekérdezed, hogy user.getExtension(). Ez honnan kap értéket? Hogy van 
> annotálva a két bean? 

A kapcsoalt így van deklarálva:
User:
@OneToOne(mappedBy = "user")
private UserExtension extension;

UserExtension:
@OneToOne
@JoinColumn(name = "ID_USER")
private User user;



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