/ / Czy w przypadku wzorca DAO udostępniasz EntityManager lub sesję jako parametr? - java, orm

Przy użyciu wzoru DAO, czy kiedykolwiek wystawiasz EntityManager lub Session jako parametr? - java, orm

Czy zdarza się, że w standardowej aplikacji internetowej występuje przypadek, w którym jako wywołanie DAO przekazuje się EntityManager lub sesję jako parametr, tj. findPersonByName(String name, Session session)? A może otwarcie i zakończenie sesji powinno być abstrakcyjne we wdrożeniu?

Odpowiedzi:

7 dla odpowiedzi № 1

Lepszym rozwiązaniem byłoby zainicjowanie lub w inny sposób wstrzyknięcie DAO za pomocą SessionFactory. Następnie możesz robić takie rzeczy:

public abstract class AbstractHibernateDao<T extends Object>
implements AbstractDao<T> {

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

protected Session getSession() {
return sessionFactory.getCurrentSession();
}

public void save(T t) { getSession().save(t); }

public void update(T t) { getSession().update(t); }

...
}

bez konieczności zdawania Sessions wszędzie.


0 dla odpowiedzi nr 2

Nie, nigdy nie należy go używać, tylko warstwę usługimoc. Wyobraź sobie, że masz dwie różne metody (w możliwie różnych DAO), które muszą być zawarte w tej samej transakcji (zatwierdzanie / wycofywanie), niż możesz / musisz użyć tego samego obiektu połączenia.