Я нашел JPA или, похоже, не поощрял шаблон DAO. Я не знаю, но я чувствую себя так, особенно с управляемыми серверами менеджерами JTA.
После адекватного практического использования шаблона DAO я начал создавать приложение на основе JPA вокруг этого шаблона. Но это не подходит, ИМО. Я, как правило, теряю некоторые особенности JPA и всех.
Хорошо, предположим, что вы запускаете запрос с пессимистической блокировкой, и он возвращает список entites из метода DAO. По возвращении завершаются транзакции и блокировка (случай с управляемым сервером JTA-менеджером). Итак, нет смысла, свободно говорить. Однако существуют действительные случаи.
Другой пример намного более тривиален. Предположим, что вы запускаете запрос для получения какой-либо сущности, которая имеет ленивую загрузку взаимно-однозначной связи с каким-либо другим объектом. После возврата метода DAO транзакция завершается. Lazy loading больше не будет работать, вы просто получите null
или что-то еще. Чтобы справиться с этим, мы загружаем его с готовностью вручную. мы делаем что-то вроде a.getBList().size()
.
Таким образом, IMO лучше не делать DAO исключительно и делать это в своем бизнесе bean, таким образом вы сможете воспользоваться этими полезными функциями. Или ORM API можно считать DAO/Data-layer, возможно. Поэтому нам не нужно делать другой.
Что вы думаете об этом?
Примечание. Я не утверждаю, что шаблон DAO устарел. Действительно, это зависит от случая.