Мне нравится идея DTO, но я всегда чувствовал, что другие разработчики их не очень хорошо принимали или не любили, поскольку для правильной реализации этого подхода вплоть до базы данных обычно требуется много усилий. Вот почему я создал Blaze-Persistence Entity Views , которые позволяют вам моделировать DTO как интерфейсы, которые эффективно сопоставляются с моделью сущностей JPA. Вы можете применить представление сущности к запросу, и запрос будет адаптирован таким образом, что он будет получать только фактически требуемое состояние, а не все состояние и отображать его в Java.
Используя представления сущностей, вам не нужно открывать сеанс в представлении анти-паттерна, потому что желаемая структура загружается с нетерпением. Поскольку объекты сущности не задействованы, также не возникнет проблем с отложенной загрузкой.
Поскольку сущностная модель часто очень похожа на модель DTO на ранних стадиях разработки, я часто вижу, как разработчики просто пропускают создание отдельной модели DTO, пытаясь избежать хлопот. Как только сквозные проблемы, такие как аудит, статистика или денормализация, попадают в модель сущности или объем данных в модели сущности становится намного больше, чем то, что вам действительно нужно для сценариев использования сущности, у разработчиков возникают проблемы.
Вам точно понравится сообщение в блоге по этому вопросу, которое я написал некоторое время назад.