我使用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>
所有选项均无效。我还需要使用只读缓存策略吗?
答案 0 :(得分:0)
在spring中分配属性的方式不正确。
<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>
这是您应该设置这些属性的方式。
答案 1 :(得分:0)
将hibernate.cache.use_second_level_cache
设置为true
是不够的。您还必须定义要使用的Hibernate缓存提供程序类和缓存区域工厂。 E.g:
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.region.factory_class=org.hibernate.cache.SingletonEhCacheRegionFactory