Подтвердить что ты не робот

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;


ИЗМЕНИТЬ
Добавили свой собственный ответ, который исправил его для меня.

4b9b3361

Ответ 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)