Я столкнулся с той же проблемой.
Код работал в среде тестирования. Но он не работал в промежуточной среде.
org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 3; expected: 1
Проблема заключалась в том, что таблица имела одну запись для каждого первичного ключа в тестируемой таблице БД. Но в промежуточной БД было несколько записей для одного и того же первичного ключа. (Проблема в том, что в промежуточной БД для таблицы не было ограничений первичного ключа, также было несколько записей.)
Таким образом, каждый раз при обновлении происходит сбой. Он пытается обновить одну запись и рассчитывает получить количество обновлений равным 1. Но поскольку в таблице было 3 записи для одного и того же первичного ключа, число обновлений результата находит 3. Поскольку ожидаемое количество обновлений и фактическое число обновлений результатов не совпадают , Выдает исключение и откатывается.
После того как я удалил все записи, которые имеют дубликаты первичного ключа и добавили ограничения первичного ключа. Работает нормально.
Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
фактическое количество строк: 0 // означает, что запись не найдена для обновления
update: 0 // означает, что запись не найдена, поэтому ничего не обновляется
Ожидаемый: 1 // означает ожидаемую по крайней мере 1 запись с ключом в таблице базы данных.
Здесь проблема в том, что запрос пытается обновить запись для некоторого ключа, но hibernate не нашел ни одной записи с ключом.