Как сохранить и обновить в одной транзакции
У меня есть несколько пользователей. Чтобы предотвратить параллелизм, я пишу что-то вроде этого:
@EJB
PersistenceManagerRemote persistenceManager;
persistenceManager.lock(decidableEntity, LockModeType.READ);
persistenceManager.refresh(decidableEntity);
это сработало для меня. Однако, если я сохраняю что-то, а затем вызываю этот код в той же транзакции, я получаю ошибку en.
javax.persistence.PersistenceException: org.hibernate.HibernateException: this instance does not yet exist as a row in the database
Когда я сохраняю сущность, контекст базы данных не изменяется до завершения транзакции. Поэтому, когда я обновляюсь, он пытается найти объект в базе данных, поэтому возникает ошибка. У тебя есть решение? Я не могу разделить на две транзакции. Я должен также рассмотреть параллелизм. Что я могу сделать?
1 ответ
Вам нужно позвонить em.flush()
записать все ожидающие изменения в базу данных. persist()
только создает временную сущность, привязанную к контексту постоянства. Спящий режим сбрасывается только при необходимости, чтобы избежать их, если это не так, и чтобы можно было затем отправить их в пакет.