Спящий сбрасывающий старое состояние объекта - PullRequest
0 голосов
/ 14 января 2019

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

TransactionStatus tx = createNewTransaction();
Entity current = Entity.findById(entityId);
if(shouldProceed(current)){
    current.setResult(newResult);
    ...
    Entity.persist(current);
    commit(tx);
}

Entity.findById (Long id) вызывает get (Class clazz, Serializable id) в сеансе.
Entity.persist (Entity e) вызывает Session.saveOrUpdate (T entity), и оттуда, похоже, не вызывает никакого не-спящего кода.
commit (TransactionStatus tx) использует AbstractPlatformTransactionManager.commit (статус TransactionStatus) и не использует никаких функций, специфичных для нашего кода (кроме обработки исключений).

shouldProceed (Entity e) не изменяет состояние объекта, и нет явного вызова для сброса состояния после этого.
Как старое состояние используется Hibernate как то, что оно должно сбрасывать, когда состояние в Hibernate должно было быть обновлено для сущности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...