jiber hibernate и кэш 2-го уровня - PullRequest
0 голосов
/ 29 апреля 2011

моя конфигурация следующая:

persitence.xml

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.SingletonEhCacheProvider"/>
<property name="hibernate.ejb.classcache.demo.entities.UserID" value="read-only"/>
<property name="javax.persistence.sharedCache.mode" value="ALL"/>

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">
    <diskStore path="java.io.tmpdir/Customer-portlet-cache"/>

    <defaultCache eternal="false" maxElementsInMemory="1000"
                  overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
                  timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
    <cache name="userCache" eternal="true"
           maxElementsInMemory="999" overflowToDisk="true"
           diskPersistent="true" timeToIdleSeconds="0"
           timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU"/>
</ehcache>

У меня есть аннотированный компонент Seam @Create, который получает список всех идентификаторов пользователей и сохраняет их в кеше.Идея здесь состоит в том, чтобы получить приложение с теплым кэшем, но когда я получаю доступ к сущностям из приложения, я начинаю получать повторные исключения Lazy Initialization (поскольку сущность не связана с persistenceContext и имеет некоторые отношения OneToMany и ManyToMany, и онине будет загружаться с сущностью, и если я установлю тип выборки как нетерпеливый, я попаду в более неприятные области)

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

1 Ответ

1 голос
/ 29 апреля 2011

Не обращаться к кэшу 2-го уровня вручную.Если вам нужен отдельный слой кэширования, создайте новый, отличный от слоя hibernate.

В любом случае вы можете Hibernate.initialize(..) свои объекты и коллекции, прежде чем помещать / отправлять их куда-либо

И, наконецЯ не думаю, что ваш кэш 2-го уровня настроен правильно.Для более новой версии это должно выглядеть так:

<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.region.factory_class"
            value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...