Hibernate шаблон закрытия транзакции - PullRequest
1 голос
/ 18 сентября 2009

Я запускаю следующий рабочий код:

    Session session = null;

    try {

        SessionFactory sessionFactory = new Configuration().configure()
                .buildSessionFactory();
        session = sessionFactory.openSession();

        String id = (String) FacesContext.getCurrentInstance()
                .getExternalContext().getRequestParameterMap().get(
                        "storeId");

        Transaction t = session.beginTransaction();

        stores = getStores();

        for (Store store : stores) {
            if (store.getId() == Integer.parseInt(id)) {
                session.delete(store);
            }
        }
        t.commit();
    } catch (Exception e) {
    } finally {
        session.close();
    }
}

Когда я пытаюсь повторить этот код для использования шаблона Hibernate, я отправляю бесконечный запрос в БД:

    HibernateTemplate template = new HibernateTemplate();
    template .setSessionFactory(sessionFactory);

    stores = template.find("from Stores");

    for (Store store : stores) {
      if (store.getId() == Integer.parseInt(id)) {
        template.delete(store);
}}

Похоже, транзакция не закрыта.

Как я могу закрыть транзакцию в этом случае? И лучше ли будет использовать шаблонный подход Hibernate вместо того, чтобы сессионный подход показывал сначала код?

1 Ответ

5 голосов
/ 18 сентября 2009

Вы не сказали этого, но я предполагаю, что вы имеете в виду класс HibernateTemplate в Spring Framework. HibernateTemplate участвует в транзакциях Spring, но не управляет ими самостоятельно. Spring предоставляет множество способов для управления транзакциями как программно, так и декларативно. Если вы просто экспериментируете, вы можете использовать класс TransactionTemplate , чтобы быстро его протестировать. Для более крупных проектов вы должны рассмотреть возможность использования декларативного управления транзакциями, потому что это упрощает ваш код, хотя изначально немного сложнее его настроить.

Что касается того, лучше ли подход HibernateTemplate , чем управление своими сеансами вручную, я бы сказал, что все, что сокращает стандартный код, - это хорошо, так что да. Это особенно важно для больших проектов. Однако, в зависимости от вашего проекта, HibernateTemplate может даже не потребоваться. Первоначально он был создан для устранения некоторых недостатков в Hibernate 2.x, но многие из этих недостатков были устранены в Hibernate 3. Поэтому, прежде чем его принять, прочтите HibernateTemplate JavaDoc для обсуждения преимуществ.

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