Почему HibernateDaoSupport не рекомендуется?
Я недавно поработал с Hibernate 3.5 и Spring 3, я довольно новичок в Hibernate и подумал HibernateDaoSupport
Благодаря классу в Spring стало легко и удобно использовать Hibernate с классами моего домена.
Однако во время поиска несвязанного вопроса я увидел, что кто-то упомянул, что HibernateDaoSupport
это не лучший способ использовать Spring и Hibernate. Может ли кто-нибудь пролить свет на:
- Почему это не рекомендуется?
- Каков наилучший (или, по крайней мере, общепринятый) способ интеграции Hibernate и Spring?
2 ответа
С помощью HibernateDaoSupport
/HibernateTemplate
не рекомендуется, так как это излишне связывает ваш код с классами Spring.
Использование этих классов было неизбежно со старыми версиями Hibernate для интеграции поддержки транзакций, управляемых Spring.
Однако, начиная с Hibernate 3.0.1, он вам больше не нужен - вы можете написать код для простого API Hibernate при использовании транзакций, управляемых Spring. Все, что вам нужно, это настроить поддержку транзакций Spring, внедрить SessionFactory
и позвонить getCurrentSession()
на нем, когда вам нужно работать с сессией.
Еще одно преимущество HibernateTemplate
это исключение перевода. Без HibernateTemplate
та же функциональность может быть достигнута с помощью @Repository
аннотация, как показано в ответе Гарета Дэвиса.
Смотрите также:
За мои деньги нет ничего плохого в использовании HibernateDaoSupport
, Это не устарело весной 3.0.
Можете ли вы предоставить номер вопроса, который вы нашли, может быть, они ссылаются на очень конкретный вариант использования.
Альтернативой является использование @Repository
аннотаций. Это будет перевод в том же переводе исключений (одно из больших преимуществ HibernateTemplate
) и позволит вам либо использовать свой собственный суперкласс, либо просто избегать расширения стороннего каркасного класса.
@Repository
public class YourFooDao {
@Resource
private SessionFactory sessionFactory;
private Foo get(long id){
return (Foo) sessionFactory.getCurrentSession().get(id);
}
}