#java #hibernate #orm #ehcache
#java #спящий режим #orm #ehcache
Вопрос:
Я использую Hibernate 3.5.1, который поставляется в комплекте с EHCache 1.5.
Если я хочу использовать последнюю версию EHCache (2.0.1), нужно ли просто удалить ehcache-1.5.jar из моего проекта и заменить на ehcache-core-2.0.1.jar ? Какие-либо проблемы, о которых следует знать?
Также — совпадает ли «область» кэша в файле отображения Hibernate с «именем» кэша в xml конфигурации ehcache? Что я хочу сделать, так это определить 2 именованные области кэша — одну для доступных только для чтения ссылочных объектов, которые не будут меняться (списки поиска и т.д.), И одну для всех других объектов. Итак, в ehcache я хочу определить два элемента;
<cache name="readonly"> ... </cache>
<cache name="mutable"> ... </cache>
И затем в моих файлах отображения Hibernate я укажу кэш, который будет использоваться для каждого объекта:
<hibernate-mapping>
<class name="lookuplist">
<cache region="readonly" usage="read-only"/>
<property> ... </property>
</class>
</hibernate-mapping>
Это сработает? Похоже, что в некоторой документации подразумевается, что для каждого отображаемого класса создается отдельная область / кэш…
Спасибо.
Ответ №1:
Если я хочу использовать последнюю версию EHCache (2.0.1), нужно ли просто удалить ehcache-1.5.jar из моего проекта и заменить на ehcache-core-2.0.1.jar ? Какие-либо проблемы, о которых следует знать?
Согласно документации Ecache об использовании Ehcache в качестве кэша второго уровня гибернации, вам придется использовать ehache-core.jar действительно, но также для изменения конфигурации Hibernate.
Также — совпадает ли «область» кэша в файле отображения Hibernate с «именем» кэша в xml конфигурации ehcache?
ДА. Опять же, обратитесь к документации, это объясняется в разделе Настройка ehcache.xml .
Это сработает? Похоже, что в некоторой документации подразумевается, что для каждого сопоставленного класса создается отдельная область / кэш
Документация не подразумевает, в сопоставлениях кеша черным по белому написано, что это значение по умолчанию:
region (optional: defaults to the class or collection role name): specifies the
name of the second level cache region
Будет ли это работать? Технически, да. Хорошая ли это идея? Я не уверен. ИМО предпочтительнее иметь более мелкозернистые области как на уровне Hibernate, так и на уровне Ehcache (особенно, если вы планируете использовать распределенное кэширование и стратегию аннулирования, вы, конечно, не хотите делать недействительными все объекты). Я бы использовал настройки Hibernate по умолчанию.
Ответ №2:
У меня была такая же проблема, если вы используете maven.
лучше запретить hibernate загружать ehcache самостоятельно и предоставить ваш ввод ehcache.
т. е.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</exclusion>
</exclusions>
</dependency>
таким образом, он не будет загружать внутренний ehcache, в моем случае это была версия 1.2.3
а затем поместить
<dependency>
<groupId>net.sf</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.4.2</version>
</dependency>
в вашем POM.xml
это должно сработать.