Spring 3.1, Hibernate 4, SessionFactory
Это работало:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
но обновление до вышеупомянутых версий ломает его. Каков правильный метод создания SessionFactory bean с Spring 3.1.Release и Hibernate 4.0.0.FINAL?
Ошибка при развертывании:
Вложенное исключение - java.lang.NoClassDefFoundError: Lorg/спящий режим/кэш/CacheProvider;
ИЗМЕНИТЬ
Добавили свой собственный ответ, который исправил его для меня.
Ответы
Ответ 1
Я думаю, вы должны использовать org.springframework.orm.hibernate4.LocalSessionFactoryBean
вместо
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
От LocalSessionFactoryBean
javadoc:
ПРИМЕЧАНИЕ. Этот вариант LocalSessionFactoryBean требует Hibernate 4.0 или выше. Это похоже на роль в том же названном классе в пакете orm.hibernate3. Однако на практике он ближе к AnnotationSessionFactoryBean, так как его основная цель - загружать SessionFactory из сканирования аннотаций.
Ответ 2
Hibernate 4 удалил устаревшие CacheProvider
-связанные интерфейсы и классы в пользу ранее выпущенного интерфейса RegionFactory
-связанного кэша. Вы можете найти сводку кэш-памяти версии 4 здесь, сводка пакетов кэша версии 3.2 здесь (непосредственно перед добавлением интерфейса RegionFactory
) и резюме пакета кэша версии 3.3 здесь (когда RegionFactory
был впервые выпущен).
Кроме JavaDoc, вы можете найти следующую документацию:
Однако на основе Spring 3.1 dependencies Spring 3.1 не требуется Hibernate 4 (под Full Dependencies
раздел JBoss Hibernate Object-Relational Mapper
находится в версии 3.3.2.GA
). Если вы хотите перейти на Hibernate 4, вам необходимо обновить настройки кэша. В противном случае попробуйте использовать версию Hibernate 3.3.2 или выше 3.X.
ОБНОВЛЕНИЕ. Имейте в виду, что документация Hibernate 4 в Spring 3.1 в настоящее время разрежена. Spring Framework Reference Documentation
имеет только Поддержка Hibernate 4.x:
See Javadoc for classes within the new org.springframework.orm.hibernate4 package
Spring 3.1 вводит LocalSessionFactoryBuilder
, который расширяет Hibernate Configuration
.
Казалось бы, вам следует следить за некоторыми другими изменениями, если вы хотите использовать Hibernate 4.
ОБНОВЛЕНИЕ 2. Просто заметил, что этот вопрос является близким дубликатом Exception NoClassDefFoundError для CacheProvider.
Ответ 3
Используйте эту конфигурацию
конфигурационный файл спящего режима:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
POM:
<!-- CGLIB -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>${cglib-version}</version>
<scope>runtime</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${org.hibernate-version}</version>
<!-- will come with Hibernate core -->
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
я забыл включить версии, я использую версию спящего режима: 4.1.2.Final и spring версия: 3.1.1.RELEASE, есть обновление спящего режима 4.1.3. Final, не проверено, но я верю он будет работать нормально.
Ответ 4
Мне пришлось изменить пару вещей, вот и мы:
В моем менеджере транзакций изменилось 3 → 4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
И мой sessionFactory к этому (спасибо @toxin):
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
Ответ 5
- В случае Hibernate 4.0 или выше, с Spring 4.0, вы должны использовать
org.springframework.orm.hibernate4.LocalSessionFactoryBean
Например:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
</bean>
См. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html
- В случае Hibernate 5.0/5.1/5.2 с Spring 4.3 вам лучше использовать
org.springframework.orm.hibernate5.LocalSessionFactoryBean
(см. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate5/LocalSessionFactoryBean.html)
Ответ 6
Spring 3.1 и Hibernate 4 несовместимы по-разному. Пожалуйста, обратитесь к следующей Spring JIRA https://jira.springsource.org/browse/SPR-9365