Как включить только чтение в Hibernate? - PullRequest
0 голосов
/ 02 сентября 2010

Я использую Spring для создания SessionFactory:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
      p:dataSource-ref="dataSource">
    <property name="mappingResources">
        <list>
            <value>META-INF/mapping/domain-objects.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.show_sql=true
            hibernate.format_sql=true
        </value>  
    </property>
</bean>  

Я бы хотел отобразить один из классов только для чтения.

    <class name="MyDomainObject">

    <!-- everything works without this line -->
    <cache usage="read-only" />

    <id name="id" />
    <property name="name"
              column="name" />

</class>

После того, как я добавил стратегию кэширования только для чтения в отображение MyDomainObject, тестовая программа начинает выдавать исключение:

Caused by: org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]

Я попытался установить для hibernate.cache.use_second_level_cache и / или hibernate.cache.use_query_cache значение true.

    <property name="hibernateProperties">
        <value>
            hibernate.show_sql=true
            hibernate.format_sql=true
            hibernate.cache.use_second_level_cache=true
            hibernate.cache.use_query_cache=true
        </value>  
    </property>

Ни один из вариантов не работал. Что еще мне нужно для использования стратегии кэширования только для чтения?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Недостаточно указать от hibernate.cache.use_second_level_cache до true.Вы также должны определить класс провайдера кэширования Hibernate и фабрику области кеша для использования.Например:

hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.region.factory_class=org.hibernate.cache.SingletonEhCacheRegionFactory
0 голосов
/ 02 сентября 2010

Неверный способ назначения свойств весной.

        <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.MySQLDialect
            </prop>
            <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
            <prop key="SecondLevelCacheEnabled">true</prop>
            <prop key="hibernate.cache.use_query_cache">true</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.generate_statistics">false</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>

        </props>
    </property>

Так вы должны установить эти свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...