HIbernate 3.5.1 — могу ли я просто зайти в EHCache 2.0.1?

#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

это должно сработать.