У меня есть асинхронный аннотированный метод, который получает сущность через параметр метода. В этом методе я пытаюсь установить переменную три раза:
@Inject EntityDao entityDao;
@Asynchronous
public Future<String> doSomething (MyEntity p_myEntity) {
MyEntity myEntity = entityDao.merge(p_myEntity); // change from detached to attached
// em.contains(myEntity) returns true
myEntity.setName("Joe 1"); // newer set in database
// A System.out.println(myEntity.getName()) does say "Joe 1"
try {
Thread.sleep(20*1000);
} catch () ...etc
myEntity.setName("Joe 2"); // newer set in database
// A System.out.println(myEntity.getName()) does say "Joe 2"
try {
Thread.sleep(20*1000);
} catch () ...etc
myEntity.setName("Joe 3"); // only one set in database
return new AsyncResult<>("done");
}
Редактировать : Так что, благодаря ПедроКовальски, я лучше понимаю проблему и переформулирую.
Во время выполнения вышеописанного метода у меня есть два способа проверить, действительно ли myEntity.setName () действительно изменилось:
- Во время сна () я проверяю базу данных, если имя изменено
- На веб-странице отображается список объектов MyEntity (с именами), этот список обновляется каждые 2 секунды.
Оба приведенных выше метода указывают, что значения "Joe 1" и "Joe 2" являются более новыми в базе данных. Только после выполнения метода doSomething () в базу данных помещается набор фамилий (Joe 3).
Итак, мой вопрос: почему значения «Джо 1» и «Джо 2» не заносятся в базу данных, а в базу данных заносится только последнее значение?