С шаблоном DAO вы когда-нибудь выставляете EntityManager или Session в качестве параметра? - PullRequest
3 голосов
/ 01 марта 2009

Есть ли в стандартном веб-приложении случай, когда можно было бы передать EntityManager или Session в качестве параметра для вызова DAO, т.е. findPersonByName(String name, Session session)? Или открытие и закрытие сессии должны быть абстрагированы в реализации?

Ответы [ 2 ]

7 голосов
/ 01 марта 2009

Лучшим подходом было бы инициализировать или иным образом ввести DAO с помощью SessionFactory. Тогда вы можете делать такие вещи:

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); }

    ...
}

без необходимости проходить Session с повсюду.

0 голосов
/ 01 марта 2009

Нет, его никогда не следует использовать, но может быть слой службы. Представьте, что у вас есть два разных метода (возможно, в разных DAO), которые необходимо инкапсулировать в одну и ту же транзакцию (фиксация / откат), чем вам может потребоваться / нужно использовать один и тот же объект соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...