Spring + HibernateDaoSupport = не рекомендуются?

Рейтинг: 0Ответов: 1Опубликовано: 29.01.2015

Открыв несколько гайдов по связке Spring + Hibernate, обнаружил, что везде используется по-разному. Где используется реализация DAO примерно такая:

public class StockDaoImpl extends HibernateDaoSupport implements StockDao - взято отсюда (статья 2010-2012 гг.).

Ну а где-то почему-то HibernateDaoSupport не наследуется, а реализуется интерфейс Dao и всё. А внутри обычная работа с сессиями hibernate, ручное закрытие и ручной коммит транзакций. Вот как тут (2011 г.).

Заинтересовавшись, нагуглил на stackoverflow это (2011 г.), где сказано якобы про сильную привязку реализации DAO к Spring коду. Но я ведь работаю с интерфейсом, какая привязка? Ссылка старая, 2011 г. Так скажите, что используется сегодня - спринг 4 + хибернейт 4?

Ответы

▲ 3Принят

Типичная практика это заинжектить фабрику сессий в Dao:

@Repository
public class MyDao {
  @Autowired
  private SessionFactory sessionFactory;
}

А на сервис, который это дергает, соответственно повесить @Transactional.

Просто зачем тащить родословную своих Dao из чужих абстрактных классов (тем более наверняка захочется слепить свои абстрактные dao для базовых crud-операций)? Сейчас популярен подход делать обычные (pojo) классы и обвешивать их аннотациями.