Я сталкиваюсь с тупиковым сценарием при использовании MySQL и Hibernate (с Spring).Я получаю следующее сообщение об исключении:
не удалось получить или обновить следующее значение;SQL [NULL];вложенным исключением является org.hibernate.exception.LockAcquisitionException ... Обнаружена тупиковая ситуация при попытке получить блокировку;попробуйте перезапустить транзакцию
Мой MySQL db имеет уровень изоляции транзакции, настроенный для READ COMMITTED, и я проверил состояние INNODB, чтобы увидеть, что происходило при возникновении взаимоблокировки.По сути, я вижу две транзакции, в которых одна пытается выбрать строку из таблицы, а другая пытается обновить эту строку.Стол в споре здесь моя таблица "уникальный идентификатор".У меня есть общий корневой объект, который расширяют другие объекты @Entity.Этот корневой объект определяет свойство "id" и помечается @Id, @TableGenerator и @ GeneratedValue.
Некоторые размышления заставили меня поверить, что установка для LockMode значения UPGRADE для "select" в этой таблице можетпомогите и / или измените "select", чтобы вместо него использовать "select .... для обновления ", он использовал бы "select .... lock in share mode ".
Любые идеи, если установка Lockmode.upgrade действительно поможет или изменение "для обновления" на "блокировка в режиме совместного использования"?Во-вторых, как бы я сделал это с помощью Spring + Hibernate ... Я склонялся к реализации пользовательского LoadEventListener (который будет расширять DefaultLoadEventListener).