Объекты JPA представляют собой простые POJO и, следовательно, (в отдельном состоянии) являются прекрасным примером DTO. Я бы не стал создавать еще один слой абстракции, если бы он не был абсолютно необходим.
На мой взгляд, в некоторых ситуациях вы можете использовать явные DTO:
- когда вам понадобится составной объект для использования на уровне графического интерфейса, который не нуждается (или не может) использовать поля непосредственно из сущностей JPA (т.е. объединяет данные из разных объектов или использует только часть данных и вы не хотите, чтобы клиент имел доступ к некоторым другим частям)
- когда вы используете управляемый доменом дизайн, в котором бизнес-логика строится вокруг ваших сущностей. В этом случае ваши сущности не являются простыми компонентами Java Bean, а являются полноценными компонентами бизнес-логики, и поэтому вы, возможно, не захотите предоставлять их напрямую клиенту.
Всегда задавайте себе вопрос - что это дает вам, чтобы ввести еще один уровень абстракции и, если это необходимо в вашем конкретном случае.
НТН.