Делает ли кеш второго уровня Hibernate недействительным при запуске оператора обновления JPQL

Когда вы запускаете запрос на обновление или удаление JPQL, достаточно ли умен Hibernate, чтобы сделать недействительным кеш 2-го уровня для измененной сущности?

Надуманный пример:

У вас есть JPQL:

update Product p set p.status = 'S' where p.name like 'Monitor%'

Если у вас в настоящее время есть продукты в кэше 2-го уровня, когда этот оператор запускается, будет ли Hibernate аннулировать все продукты из кеша или ничего не делает с кешем, и продукты в кеше 2-го уровня теперь недействительны?

Просто к сведению ... Я использую JBoss 5.1 с Hibernate и JBossCache


person larf311    schedule 07.01.2010    source источник
comment
Интересный. Я думаю, вы можете проверить это - установите showSql = true (или, если не используете JPA, свойство hibernate для отображения вывода sql на консоли) и посмотрите, извлекается ли снова из базы данных объект, который был только что обновлен с помощью hql.   -  person Bozho    schedule 08.01.2010
comment
Это скажет вам только, если он перезагрузит эти элементы в кеш, чего я не думаю. Он не сказал бы вам, если бы он сделал кеш недействительным, поэтому все экземпляры этого объекта пришлось бы перезагружать из базы данных. Думаю, мне просто нужно сделать тест и выяснить. Я надеялся, что здесь кто-нибудь быстро ответит.   -  person larf311    schedule 08.01.2010


Ответы (1)


После запуска моего собственного теста и обнаружения этой ошибки оказалось, что сделает недействительным ВЕСЬ кэш второго уровня, а не только кеш второго уровня для любых объектов, участвующих в обновлении.

person larf311    schedule 08.01.2010