транзакции в разных потоках и в них делаю findById.
Потом делаю тоже самое, но с PESSIMISTIC_WRITE-локом (т.е. select for update). Одна транзакция выигрывает, вторая зависает на локе.
Далее в первой транзакции делаю update и commit транзакции.
Тут лок отпускается и во второй транзакции получаю объект, но со старым значением (до update), потому что entity уже есть в persistence context. Делаю update и теряю предыдущий update.
Это ожидаемое поведение? Можно ли как-то настроить hibernate, чтобы второй select for update обновлял мою entity?
Странно. Я посмотрел код. Я попадаю вот сюда https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/loader/Loader.java#L1609 потом вот сюда https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java#L406 А здесь уже просто HashMap, в которой лежит старый Entity.
Обсуждают сегодня