2015-11-26 4 views
14

Я хотел перейти на Hibernate 5, но я не могу заставить его работать по какой-то странной причине.Как настроить Hibernate 5 с пружиной 4

Моя весна конфигурации контекста с Hibernate 4 выглядит следующим образом:

.... 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses" ref="hibernateClasses" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       ${hibernate.dialect} 
      </prop> 
      <prop key="hibernate.show_sql"> 
       ${hibernate.show_sql} 
      </prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics"> 
       ${hibernate.generate_statistics} 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto"> 
       ${hibernate.hbm2ddl.auto} 
      </prop> 
     </props> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

.... 

я ушел из источника данных и определение бобы hibernateClasses.

Для Hibernate 5 Я изменил имя пакета для hibernate5 как это:

.... 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses" ref="hibernateClasses" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       ${hibernate.dialect} 
      </prop> 
      <prop key="hibernate.show_sql"> 
       ${hibernate.show_sql} 
      </prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics"> 
       ${hibernate.generate_statistics} 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto"> 
       ${hibernate.hbm2ddl.auto} 
      </prop> 
     </props> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

.... 

когда я запускаю мои тесты контекст приложения не запускается, потому что он не может найти LocalSessionFactoryBean класс: -S. Этот класс находится в весенне-ОРМ JAR и на самом деле присутствует, но по какой-то причине он не может быть найден и выдает следующее исключение:

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.orm.hibernate5.LocalSessionFactoryBuilder 

Мои зависимостями Maven следующим образом:

<!-- Servlet API --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>${servlet-api.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Spring libraries --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>cglib</groupId> 
       <artifactId>cglib</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>asm</groupId> 
       <artifactId>asm</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>${slf4j.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Test --> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>${cglib.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>${asm.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-mock</artifactId> 
     <version>${spring-mock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.easymock</groupId> 
     <artifactId>easymock</artifactId> 
     <version>${easymock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>${hsqldb.version}</version> 
     <scope>test</scope> 
    </dependency> 

ли кто-нибудь идея, что я делаю неправильно?

+0

Какова ваша версия спящего режима в вашем файле pom? –

+0

Версия, которую я использую, - 5.0.4. Финал – Tranquilized

+1

Что такое весенняя версия? У меня та же проблема с весной 4.2.6 и спящим 5.5.3 конфигурацией. –

ответ

9

Может быть, вы должны добавить

<dependency> 
    <groupId>javax.transaction</groupId> 
    <artifactId>jta</artifactId> 
    <version>1.1</version> 
</dependency> 

Я была такая же проблема, и мои первоначальные журналы жаловались,

java.lang.NoClassDefFoundError: javax/transaction/SystemException

+0

Thnx !! Это сделало трюк – Tranquilized

6

@sapna ответ работает.

Но для тех, кто интересуется, почему она разрывает между спящим 5.0.3.Final и 5.0.4.Final, вот ответ: Сняла зависимость от JTA, который был:

<dependency> 
    <groupId>org.apache.geronimo.specs</groupId> 
    <artifactId>geronimo-jta_1.1_spec</artifactId> 
    <version>1.1.1</version> 
    <scope>compile</scope> 
</dependency> 

Изменения описывается там: HHH-10178

Так что если вы обновляете с 5.0.x до 5.0.4 или 5.0.5 и не хотите ничего менять в своем пути к классам, вам следует скорее импортировать эту библиотеку, чем javax.transaction: jta one ,

EDIT: они вернули это изменение с помощью hibernte 5.0.7: HHH-10307, поэтому обновление этой версии или новее должно также устранить проблему.

Смежные вопросы