Здесь есть хорошая ссылка: http://martinfowler.com/eaaCatalog/
Также здесь: http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html
Кроме того, JPA не обязательно устраняет необходимость в слое DAO.Вместо этого ваш уровень DAO по-прежнему будет создавать запросы JPA, вероятно, в методах поиска и возвращать сущности, которые были возвращены этими запросами.
Вы можете исключить слой DAO и вместо этого попадать в сущности JPA непосредственно в бизнес-уровне, но лично мне все еще нравится поддерживать отдельный уровень персистентности (DAO) и бизнес-уровень, особенно в тех случаях, когда мне приходится смешивать немного JPA с простым JDBC и т. д.
Существует большое резюмедебаты здесь .Лучший ответ, что это зависит.Если ваше приложение сложное, и в некоторых случаях вы можете обращаться к JDBC напрямую (потому что инструменты JPA и ORM не являются ответом на все вопросы, и в некоторых вещах они очень плохие), или если вам нужно извлечь данные из источников, которые просто неЕсли вы не будете хорошо работать с ORM, вам все равно понадобится слой DAO, поэтому, на мой взгляд, я предпочел бы быть последовательным и использовать слой DAO для всего.Как правило, это не так сложно, и это изолирует вашу бизнес-логику от вашей логики постоянства, что я считаю хорошей вещью.Но это вопрос личных предпочтений, и если ваше приложение достаточно простое, оно, вероятно, излишне.
Существует хорошая рекомендация общего шаблона DAO, который можно использовать с JPA здесь .Это дает вам преимущества DAO в том, что вы всегда можете переопределить это для конкретного DAO, сохраняя при этом более стандартные и типичные взаимодействия с базой данных проще.