Seam — как удалить объект

#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, чтобы вы могли сохранять объект при необходимости после внесения изменений.