Spring 3.1, Hibernate 4, SessionFactory - PullRequest
       5

Spring 3.1, Hibernate 4, SessionFactory

42 голосов
/ 19 декабря 2011

Это работало:

<bean id="sessionFactory"  
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...

, но обновление до вышеупомянутых версий ломает его.Как правильно создать SessionFactory bean с Spring 3.1. Выпуск и Hibernate 4.0.0.FINAL ?

Ошибка при развертывании:

вложенным исключением является java.lang.NoClassDefFoundError: Lorg / hibernate / cache / CacheProvider;


РЕДАКТИРОВАТЬ
Добавить свой собственный ответ, который исправил его для меня.

Ответы [ 6 ]

92 голосов
/ 19 декабря 2011

Я думаю, вам следует использовать org.springframework.orm.hibernate4.LocalSessionFactoryBean вместо org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

From LocalSessionFactoryBean javadoc:

ПРИМЕЧАНИЕ. Для этого варианта LocalSessionFactoryBean требуется Hibernate 4.0 или выше.По роли он похож на одноименный класс в пакете orm.hibernate3.Однако на практике он ближе к AnnotationSessionFactoryBean, поскольку его основная цель - запустить SessionFactory из сканирования аннотаций.

15 голосов
/ 19 декабря 2011

Hibernate 4 удалил устаревшие интерфейсы и классы, связанные с CacheProvider, в пользу ранее выпущенного интерфейса кэширования, связанного с RegionFactory.Вы можете найти сводку пакета кэша версии 4 здесь , сводку пакета кэша версии 3.2 здесь (непосредственно перед добавлением интерфейса RegionFactory) и сводку пакета кэша версии 3.3 здесь (когда RegionFactory был впервые выпущен).

Кроме JavaDoc, вам может пригодиться следующая документация:

Однако на основе зависимостей Spring 3.1 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, который расширяет * 1047 Hibernate*Configuration.

Казалось бы, вам следует следить за некоторыми другими изменениями , если вы хотите использовать Hibernate 4.

ОБНОВЛЕНИЕ 2 : только что заметил, что этот вопрос является точной копией Исключение NoClassDefFoundError для CacheProvider .

8 голосов
/ 04 мая 2012

Используйте эту конфигурацию

файл конфигурации Hibernate:

<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>

Я забыл включить версии, я использую версию Hibernate: 4.1.2.Final и весенняя версия: 3.1.1.RELEASE, есть обновление hibernate 4.1.3.Final, не проверено, но я верю, что оно будет работать нормально.

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

Мне пришлось изменить пару вещей, здесь мы идем:

В моем диспетчере транзакций настройки изменились 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager;

И мой sessionFactory к этому (спасибо@toxin):

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
0 голосов
/ 16 октября 2016
  • В случае 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)

0 голосов
/ 02 мая 2012

Spring 3.1 и Hibernate 4 несовместимы во многих отношениях. Пожалуйста, обратитесь к следующей весной JIRA https://jira.springsource.org/browse/SPR-9365

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