Кажется, существуют два шаблона для реализации бизнес-транзакций, которые охватывают несколько HTTP-запросов с помощью JPA:
- entity-manager-per-request с отдельными объектами
- расширенный контекст сохранения
Каковы преимущества этих шаблонов? Когда должно быть предпочтительным?
До сих пор я придумал:
- расширенный контекст persistence гарантирует, что идентичность объекта эквивалентна идентификатору базы данных, упрощая модель программирования и потенциально распуская необходимость реализовать равные для сущностей.
- отдельные объекты требуют меньше памяти, чем расширенный контекст персистентности, так как контекст сохранения также должен сохранять предыдущее состояние объекта для обнаружения изменений
- больше не ссылаются на отдельные объекты, которые имеют право на сбор мусора; персистентные объекты должны быть сначала отключены явно
Однако, не имея практического опыта работы с JPA, я уверен, что упустил что-то важное, поэтому этот вопрос.
В случае, если это имеет значение: мы намерены использовать JPA 2.0, поддерживаемый Hibernate 3.6.
Изменить. Наша технология просмотра - JSF 2.0 в контейнере EJB 3.1 с CDI и, возможно, Seam 3.