Hibernate кэш второго уровня ehcache.xml, настройки кеша для сущностей не могут быть прочитаны в HIbernate - PullRequest
0 голосов
/ 01 июня 2009

Чтобы было понятнее и проще, у меня есть два проекта: 1. Проект Entity, в котором есть все классы объектов в этом проекте. 2. Проект, содержащий функцию main () для запуска приложения, My ehcache.xml, помещен в путь классов этого проекта.

Моя проблема: Я могу изменить элемент defaultCache файла ehcache.xml и увидеть изменения из файла журнала SQL. Но я думаю, что Hibernate только читает мой элемент defaultCache , потому что что бы я ни изменил в элементе cache конкретной сущности ehcache.xml, в SQL не будет никаких изменений журнал.

Например: Если я установлю maxElementsInMemory из defaultCache на 0 , то независимо от того, что я установил maxElementsInMemory элемента cache объекта до 100 или 0 , в кэше второго уровня не будет кэшированного объекта. Если я установлю для maxElementsInMemory из defaultCache значение 100 , независимо от того, что я установил maxElementsInMemory для элемента cache объекта до 100 или 0 , этот объект всегда кэшируется в кэше второго уровня.

Так что я думаю, что, возможно, атрибут имени элемента cache объекта задан неправильно и не может быть прочитан из Hibernate?

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Я нашел, где моя проблема. Я использую ehcache в качестве поставщика кеша. В ehcache.xml, я думаю, элемент defaultCache также используется для ВСЕХ QueryCaches, если я не установил элемент standardQueryCache. Поэтому не важно, установил ли я значение maxElementsInMemory в «0», потому что все QueryCache используют область defaultCache. Но установка maxElementsInMemory в «0» может определенно помочь отключить кэш второго уровня этой сущности при использовании функции EntityManager.find ().

0 голосов
/ 11 октября 2010

ПОЖАЛУЙСТА, прочитайте документацию. В случае установки maxElementsInMemory значение 0 имеет особое значение - unlimited. Поэтому вместо того, чтобы вообще не получать кеш, вы все кешируете.

...