2013-09-13 9 views
0

У меня есть страница с двумя кнопками, каждая из которых называет методы вызова в двух разных классах, у которых в них вводится сущностьManager.Удостоверяясь, что транзакция совершается раньше, чем другая начинается при использовании разных классов в Seam

Теперь, когда в классе 1 вызывается метод save(), объект обновляется с последними значениями. Перед возвратом метода я вызываю entityManager.flush(), чтобы изменения были сброшены в базу данных.

Сразу после этого, если я нажму на другую кнопку, которая вызывает метод advance() класса 2 и загружает тот же объект с использованием entityManger.find(entity.class, Long.valueOf(entityId)), поля, которые были обновлены в предыдущем вызове метода, показывают, что это null.

Нужно ли выполнять какие-либо настройки, чтобы убедиться, что этого не происходит, или как я могу совместно использовать диспетчер сущностей между этими двумя классами, чтобы я мог убедиться, что вызовы после операции флеша работают с обновленной базой данных.

ответ

1

Сделка завершена. Это не проблема.

Из Java док метода EntityManager.find():

Если экземпляр объекта содержится в контексте сохранения состояния, он возвращается оттуда.

Это означает, что: поиск не будет извлекать объект из базы данных, если он уже присутствует в вашем entityManager.

Чтобы обновить объект, просто вызовите refresh(entity):

MyEntity myEntity = entityManger.find(MyEntity.class, Long.valueOf(entityId)); 
entityManger.refresh(myEntity);