EntityManager to mendżer encji (zarządza obiektami javy i mapuje je do rekordów w tabeli bazy danych) i w przypadku seama korzysta w swoim wnętrzu z mechanizmów Hibernate.
W Seam są trzy sposoby na uzyskanie dostępu do obiektu entityManager.
1. Przez adnotację @PersistenceContext:
@PersistenceContext EntityManager entityManager |
Ten sposób jest używany domyślnie przez seam-gena. Nie zalecamy go i proponujemy adnotować przez @In.
2. Przez adnotację @In:
@In EntityManager entityManager |
Ten sposób jest zalecany, ponieważ przy adnotacji @In to SEAM opiekuje się mendżerem encji, a nie EJB. Bezpośrednim skutkiem jest nagłe zmniejszenie (jak dobrze pójdzie, to do zera) znienawidzonych LazyInitializationException.
3. Przez pobranie instancji z obiektu Component:
EntityManager entityManager = (EntityManager) Component.getInstance("entityManager", true); |
Ten sposób jest używany w metodach i klasach, które mają adnotację @BypassInterceptors, przy czym można tak pobrać dowolne inne obiekty, nie tylko mendżera encji.