Пусть сначала забудет о Спящем. Предположим, что у меня есть две таблицы: A и B. Две транзакции обновляют одни и те же записи в этих двух таблицах, но txn 1 update B, а затем A, а txn 2 - обновление A, затем B. Это типичный пример взаимоблокировки. Наиболее распространенным способом избежать этого является предварительное определение порядка приобретения ресурсов. Например, мы должны обновить таблицу A, затем B.
Вернитесь в спящий режим. Когда мы обновляем множество сущностей за один сеанс, как только я очищаю сессию, изменения разных сущностей будут генерировать соответствующие операторы вставки/обновления/удаления в БД. Есть ли у Hibernate алгоритм для определения порядка обновления среди объектов? Если нет, то каким образом Hibernate используется для предотвращения ситуации взаимоблокировки, описанной в 1-м абзаце?
Если Hibernate поддерживает порядок, как я могу узнать или контролировать заказ? Я не хочу, чтобы мое явное обновление в БД конфликтует с Hibernate и вызывает тупик.