2010-01-07 3 views
3

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

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

Вы имеете JPQL:

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

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

Просто FYI ... Я использую JBoss 5.1 с Hibernate и JBossCache

+0

Интересно. Я думаю, вы можете проверить это: set showSql = true (или если не использовать JPA, свойство hibernate для отображения вывода sql на консоли), и посмотреть, снова ли спящий режим извлекает из базы данных объект, который был только что обновлен с помощью hql. – Bozho

+0

Это только скажет вам, перезагружает ли эти элементы в кеш, что я не думаю, что это так. То, что это не скажет вам, это если он недействителен для кеша, поэтому все экземпляры этого объекта должны быть перезагружены из базы данных. Наверное, мне просто нужно сделать тест и узнать. Я надеялся, что у кого-то есть быстрый ответ. – larf311

ответ

0

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