Как сохранить и обновить в одной транзакции

У меня есть несколько пользователей. Чтобы предотвратить параллелизм, я пишу что-то вроде этого:

@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() только создает временную сущность, привязанную к контексту постоянства. Спящий режим сбрасывается только при необходимости, чтобы избежать их, если это не так, и чтобы можно было затем отправить их в пакет.

Другие вопросы по тегам