Я удивлен, что никто другой специально не упомянул об этом, но детали реализации, такие как setSessionFactory()
, должны , а не быть в вашем интерфейсе DAO. Добавляя класс Hibernate в интерфейс DAO, вы привязываете свои DAO непосредственно к Hibernate.
Цель использования интерфейсов и внедрения зависимостей состоит в том, чтобы позволить вам изменить детали реализации (например, какое решение ORM вы используете, или если ваши данные поступают из веб-службы по сравнению с базой данных) уровня (вашего DAO) без воздействия на другие слои.
Если вы добавите setSessionFactory
к своему интерфейсу DAO, то все остальные уровни, использующие этот DAO, станут осведомленными и связанными с тем фактом, что доступ к данным осуществляется через Hibernate. Это прямо противоположно тому, чего вы пытаетесь достичь с помощью интерфейсов и внедрения зависимостей.