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