Hibernate кэш второго уровня ehcache.xml, настройки кеша для сущностей не могут быть прочитаны в HIbernate
Для ясности и простоты у меня есть два проекта: 1. Проект Entity, в котором есть все классы сущностей в этом проекте. 2. Проект, содержащий функцию main() для запуска приложения, My ehcache.xml помещается в путь классов этого проекта.
Моя проблема: я могу изменить элемент defaultCache в файле ehcache.xml и увидеть изменения из файла журнала SQL. Но я думаю, что Hibernate только читает мой элемент defaultCache, потому что, что бы я ни изменил в элементе кэша конкретной сущности ehcache.xml, в журнале SQL не будет никаких изменений.
Например: если я установлю для maxElementsInMemory элемента defaultCache значение 0, то независимо от того, что я установил для maxElementsInMemory элемента кэша объекта значение 100 или 0, в кэше второго уровня не будет кэшированного объекта. Если я устанавливаю maxElementsInMemory элемента defaultCache равным 100, то независимо от того, что я устанавливаю maxElementsInMemory элемента кэширования объекта равным 100 или 0, эта сущность всегда кэшируется в кэше второго уровня.
Поэтому я думаю, что, возможно, атрибут имени элемента кэша сущности установлен неправильно и не может быть прочитан из Hibernate?
2 ответа
Я нашел, где моя проблема. Я использую ehcache в качестве поставщика кеша. В ehcache.xml, я думаю, элемент defaultCache также используется для ВСЕХ QueryCaches, если я не установил элемент standardQueryCache. Поэтому не важно, установил ли я значение maxElementsInMemory в "0", потому что все QueryCache используют область defaultCache. Но установка для maxElementsInMemory значения "0" определенно может помочь отключить кэш второго уровня этой сущности при использовании функции EntityManager.find().
ПОЖАЛУЙСТА, прочтите документацию. В случае maxElementsInMemory
настройка, значение 0
имеет особое значение - unlimited
, Таким образом, вместо того, чтобы вообще не получать кеш, вы все кешируете.