#jpa #ejb-3.0 #seam
#jpa #ejb-3.0 #seam
Вопрос:
Я работаю над проектом Seam и столкнулся со следующей проблемой — существует форма редактирования ajax, и многие взаимодействия с этой формой влияют (мутируют) на базовый объект и немедленно изменяются в БД, но я не хочу, чтобы эти изменения сохранялись в базе данных только тогда, когда пользователь нажмет кнопку «Сохранить». Я думаю об удалении объекта для достижения этой цели, но задаюсь вопросом, как (также ищу более разумные решения).
Ответ №1:
Изменения, которые вы вносите в объект, немедленно отражаются, делая его синхронизированным с базой данных. Чтобы отсоединить объект, вы можете использовать entityManager.detach(object)
или entityManager.clear()
, но это приведет к отсоединению всех управляемых объектов.
По FlushModeType.AUTO
умолчанию в EntityManager установлен режим промывки, вместо этого попробуйте FlushModeType.COMMIT
, в котором изменения сбрасываются только при явной фиксации / сбросе, а затем используются entityManager.flush()
для синхронизации контекста сохранения с базовой базой данных.
Комментарии:
1. EntityManager.detach (object), возможно, классная вещь, но доступна начиная с java 6, мой проект использует java 5.
2. Попробуйте управлять транзакциями вручную (BMT), а не с помощью CMT, чтобы вы могли сохранять объект при необходимости после внесения изменений.