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