Почему hibernate выполняет операторы обновления sql, когда я выполняю чтение с использованием HQL для того же объекта / таблицы? - PullRequest
0 голосов
/ 13 июля 2011

Что происходит, я выполняю чтение некоторых записей, скажем, Car, где color = red, и он возвращает 10 автомобилей.Затем я перебираю эти 10 автомобилей и обновляю дату в этом автомобильном объекте, т.е. car.setDate (01.05.2010).Затем я выполняю еще одно чтение из Автомобили, где цвет = зеленый.У меня включено ведение журнала sql, и я заметил, что когда я вызываю query.list (), он фактически выводит некоторые операторы обновления в таблицу Cars, и в итоге я получаю тайм-аут ожидания блокировки.Также обратите внимание, что все это делается в одной транзакции базы данных, поэтому я могу понять тайм-аут ожидания блокировки - похоже, у меня есть блокировка таблицы, из которой я читаю, и в этой же транзакции я пытаюсь ее обновитьпрежде чем я отпущу замок на столе.Но похоже, что не следует пытаться запустить sql для обновления этих записей до конца транзакции, когда я вызываю commit?Все это использует HQL Hibernate для выполнения операций чтения.Я не призываю ничего делать напрямую, я просто делаю car.setDate.

1 Ответ

1 голос
/ 13 июля 2011

Запись в базу данных контролируется FlushMode в вашем сеансе.По умолчанию hibernate использует FlushMode.AUTO, что позволяет ему выполнять session.flush(), когда сочтет нужным.session.flush() вызывает запись незафиксированных данных сеанса в базу данных.Перенос данных сеанса в базу данных не делает их постоянными до тех пор, пока вы не завершите сеанс (или не откатите его).В зависимости от вашей стратегии блокировки таблиц / строк базы данных, строки, которые были обновлены как часть этой транзакции, могут быть заблокированы для доступа на чтение или чтение / запись.

Я думаю, что ответ находится в базе данных - делайте ваши таблицыесть подходящая стратегия блокировки, которая поддерживает ваш вариант использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...