2016-08-04 23 views
4

Ich migriere von spring3.x zu spring4.3.x. Ich verwende in Bohne Schaffung org.springframework.orm.hibernate5.LocalSessionFactoryBean alsSo konfigurieren Sie "entityCacheStrategies" in spring4.3.x

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.example.person.domain.Person</value> 
     </list> 
    </property> 

    <property name="mappingLocations"> 
     <list> 
      <value>classpath*:com/example/person/domain/Person.hbm.xml</value> 
     </list> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.cache.provider_class">${cache.providerClass}</prop> 
      <prop key="hibernate.generate_statistics">true</prop> 
      <prop key="hibernate.memcached.dogpilePrevention">true</prop> 
      <prop key="hibernate.memcached.servers">${cache.memcached.servers}</prop> 
      <prop key="hibernate.memcached.keyStrategy">com.example.memcached.ExampleCacheStringKeyStrategy</prop> 
      <prop key="hibernate.memcached.deviceAttributeDao.keyStrategy">com.googlecode.hibernate.memcached.HashCodeKeyStrategy</prop> 
      <prop key="hibernate.memcached.EncodingDao.keyStrategy">com.googlecode.hibernate.memcached.HashCodeKeyStrategy</prop> 
     </props> 
    </property> 

    <property name="entityCacheStrategies"> 
     <props> 
      <prop key="com.example.person.domain.TestAttribute">read-write,_domain</prop> 
     </props> 
    </property> 

    <property name="dataSource" ref="dataSource"/> 
</bean> 

folgt ich folgende Fehler bekommen

Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'entityCacheStrategies' of bean class [org.springframework.orm.hibernate5.LocalSessionFactoryBean]: Bean property 'entityCacheStrategies' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:242) 
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:423) 
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:280) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1514) 
... 66 more 

Ich bin mit feder 4.3.0.RELEASE. Die LocalSessionFactoryBean hat keinen Setter für EntityCacheStrategies. Irgendeine Idee, wie man dies in spring4.3.x unterstützt?

Antwort

1

Die Verwendung von entityCacheStrategies/setEntityCacheStrategies() wurde im Hibernate 5 als veraltet eingestuft. Eine mögliche Alternative zu org.hibernate.cfg.Configuration : setCacheConcurrencyStrategy(String clazz, String concurrencyStrategy) wird ebenfalls nicht mehr verwendet.

Aber wenn Sie offen für die Konfiguration des Caches mit Hibernate Annotations-Bibliothek sind, dann versuchen Sie this approach, die die Verwendung von CacheConcurrencyStrategy Enumerator macht. Sie können die entsprechende Concurrency Strategie unter Entity Ebene anwenden.

@Entity 
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 
public class Clazz{..} 

Bitte mehr Verwendungen von CacheConcurrencyStrategy im dev guide finden.