2017-02-02 2 views
0

У меня есть следующий код:Грязная проверка не работает с прикрепленным объектом из другого потока

completableFuture 
    .thenApply(x -> transactionTemplate.execute(s -> { 
     repository.save(entity); 
     entity.update(); 
     return entity; 
    })); 

entity является сущностью из другого потока, что я должен обработать после вызова асинхронного. Проблема в том, что когда я вызываю entity.update(), и некоторые данные изменены, Hibernate не выдает запрос на обновление. Если я положил repository.save(entity) после entity.update(), все будет хорошо, но это показалось мне немного странным.

Не должен ли быть грязный контрольный акт в этих случаях?

+0

Что именно вы подразумеваете под сущностью из другого потока? Транзакции и сущ. Сущности обычно связаны с потоком и не являются потокобезопасными, поэтому при использовании сущности через потоки могут возникать всевозможные вещи. «Ничто», по-видимому, не самый страшный вариант. –

+1

Не можете ли вы просто перечитать объект по идентификатору, чтобы иметь копию «freah» в текущем потоке? – StanislavL

+0

@JensSchauder Я вижу, но я думал, что повторная привязка решит эту проблему. –

ответ

1

Если я правильно понял, вы пытаетесь установить объект на текущий EntityManager по телефону save. Для этого вам следует использовать объект, возвращенный с save для дальнейшей работы.

Из documentation:

Сохраняет данное лицо. Используйте возвращаемый экземпляр для дальнейших операций, так как операция сохранения могла полностью изменить экземпляр объекта.

Смежные вопросы