Я понимаю разделение объектов уровня данных (DAO) на их собственный уровень, который абстрагирует логику доступа к данным и специфику источника данных от сервисного и бизнес-уровней, как описано в DAO и сервисные уровни (JPA / Hibernate + Spring) и другие вопросы. У меня есть опыт создания этих слоев, но я всегда использовал либо сырой JDBC, либо подобные низкоуровневые способы взаимодействия с БД (например, SpringJ SimpleBCD), и я новичок в Hibernate.
Мой вопрос заключается в том, что в сыром JDBC или в других случаях, когда вы на самом деле имеете дело с набором результатов (или тонкой оболочкой вокруг него) на уровне доступа к данным, результирующие POJO, в которых вы храните свои данные, чрезвычайно чисты и известны. ничего о том, откуда пришли данные, и я никогда не беспокоился о том, чтобы вернуть их на уровень обслуживания и за его пределы. Однако, похоже, что в Hibernate у вас есть много логики, специфичной для Hibernate / структуры данных, прямо в аннотациях POJO (например, от 1 до многих отображений, настройки отложенной загрузки и т. Д.). Мне неудобно возвращать их (или их коллекции) из моих DAO и до уровня обслуживания, и я испытываю желание, чтобы все POJO реализовали интерфейсы, которые я передаю взамен. Это хорошая практика или слишком сложная?