java.lang.ClassNotFoundException: org.hibernate.engine.transaction.spi.TransactionContext

前端 未结 6 1148
傲寒
傲寒 2021-02-19 06:02

I am developing Spring MVC Hibernate Integration example. In this example I\'m using Spring 4.1.9.RELEASE and Hibernate 5.1.0.Final. If I

相关标签:
6条回答
  • 2021-02-19 06:51

    I wanted to create an application context that works well for both Hibernate 4 and Hibernate 5 at the same time.[why?]

    So I replaced Hibernate-specific transaction manager (org.springframework.orm.hibernate4.HibernateTransactionManager) with Spring JPA transaction manager (org.springframework.orm.jpa.JpaTransactionManager):

    // part of my Java Config
    @Bean
    @Autowired
    public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory, DataSource mainDataSource) {
        final JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        transactionManager.setDataSource(mainDataSource);
        return transactionManager;
    }
    

    [why?] Because this context is shared between different modules that depend on different Spring and Hibernate versions.

    0 讨论(0)
  • 2021-02-19 06:52

    I have solved it. I have removed this part my config class and it's solved.

    @Bean
    public HibernateTransactionManager transactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    
    0 讨论(0)
  • 2021-02-19 06:55

    Changing the below import from hibernate4 to hibernate5 in hibenate configuaration file worked for me,

    import org.springframework.orm.hibernate4.HibernateTransactionManager;
    import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
    

    to this

    import org.springframework.orm.hibernate5.HibernateTransactionManager;
    import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
    
    0 讨论(0)
  • 2021-02-19 06:56

    In your pom.xml you have Hibernate 5,try to pass from hibernate5 to hibernate4) in your pom:

      <hibernate.version>4xxxx</hibernate.version>
      ...
      <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
    
    0 讨论(0)
  • 2021-02-19 06:57

    Change the definition of your transaction manager to:

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

    And upgrade your spring framework to 4.2.x

    0 讨论(0)
  • 2021-02-19 07:03

    You can use the following setup as well for Spring 4 + Hibernate 5:

    spring setup:

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>
    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    

    pom.xml setup:

    <properties>
      <java-version>1.7</java-version>
      <org.springframework-version>4.3.2.RELEASE</org.springframework-version>
    </properties>
    
    <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
    
    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.2.Final</version>
    </dependency>
    

    Tried and tested.

    0 讨论(0)
提交回复
热议问题