2016-11-15 24 views
1

我試圖使用Spring4與Hibernate5,但我得到這個錯誤:org.springframework.orm.jpa.EntityManagerHolder不能轉換爲org.springframework.orm.hibernate5.SessionHolder

org.springframework.orm.jpa.EntityManagerHolder cannot be cast to org.springframework.orm.hibernate5.SessionHolder

我改變很多次我的pom.xml

的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.horarios</groupId> 
    <artifactId>horarios</artifactId> 
    <version>0.0.1</version> 
    <packaging>jar</packaging> 

    <name>horarios</name> 
    <description>Sistema de Creacion de Horarios</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.1.RELEASE</version> 
     <!--<version>1.2.3.RELEASE</version>--> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 

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

     <!-- HIBERNATE --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.0.7.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>5.0.7.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-oxm</artifactId> 
      <version>4.2.1.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>org.thymeleaf</groupId> 
      <artifactId>thymeleaf-spring4</artifactId> 
      <version>2.1.2.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>nz.net.ultraq.thymeleaf</groupId> 
      <artifactId>thymeleaf-layout-dialect</artifactId> 
      <version>1.2.2</version> 
     </dependency> 

     <dependency> 
      <groupId>net.sourceforge.nekohtml</groupId> 
      <artifactId>nekohtml</artifactId> 
      <version>1.9.22</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

DatabaseConfig.java

import java.util.Properties; 

import javax.persistence.EntityManagerFactory; 
import javax.sql.DataSource; 

import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.hibernate5.HibernateTemplate; 
import org.springframework.orm.hibernate5.HibernateTransactionManager; 
import org.springframework.orm.hibernate5.LocalSessionFactoryBean; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 

@EnableTransactionManagement 
public class DatabaseConfig { 

    @Value("${db.driver}") 
    private String DB_DRIVER; 

    @Value("${db.password}") 
    private String DB_PASSWORD; 

    @Value("${db.url}") 
    private String DB_URL; 

    @Value("${db.username}") 
    private String DB_USERNAME; 

    @Value("${hibernate.dialect}") 
    private String HIBERNATE_DIALECT; 

    @Value("${hibernate.show_sql}") 
    private String HIBERNATE_SHOW_SQL; 

    @Value("${hibernate.hbm2ddl.auto}") 
    private String HIBERNATE_HBM2DDL_AUTO; 

    @Value("${entitymanager.packagesToScan}") 
    private String ENTITYMANAGER_PACKAGES_TO_SCAN; 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(DB_DRIVER); 
     dataSource.setUrl(DB_URL); 
     dataSource.setUsername(DB_USERNAME); 
     dataSource.setPassword(DB_PASSWORD); 
     return dataSource; 
    } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 
     sessionFactoryBean.setDataSource(dataSource()); 
     sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN); 
     Properties hibernateProperties = new Properties(); 
     hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT); 
     hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL); 
     hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO); 
     sessionFactoryBean.setHibernateProperties(hibernateProperties); 

     return sessionFactoryBean; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     HibernateTransactionManager transactionManager = 
       new HibernateTransactionManager(); 

     transactionManager.setSessionFactory(sessionFactory().getObject()); 
     return transactionManager; 
    } 

    @Bean 
    public HibernateTemplate hibernateTemplate(SessionFactory sessionFactory) { 
     return new HibernateTemplate(sessionFactory); 
    } 

    /*@Bean 
    public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { 
     final JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 
     transactionManager.setDataSource(dataSource()); 
     //transactionManager.setJpaDialect(jpaDialect()); 
     return transactionManager; 
    }*/ 




} // class DatabaseConfig 

DemoApplication.java

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 


@SpringBootApplication(exclude = JpaRepositoriesAutoConfiguration.class) 

public class DemoApplication extends SpringBootServletInitializer { 


    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(DemoApplication.class); 
    } 



} 
+1

其他情況下你有沒有嘗試排除改變'JpaRepositoriesAutoConfiguration'爲'HibernateJpaAutoConfiguration',看看發生了什麼事? – xsalefter

+0

我排除此之前。我得到:> org.springframework.data.jpa.repository.support.DefaultJpaContext中的構造函數的參數0需要一個無法找到的類型爲'java.util.Set'的bean。 – Tineo

+0

@Tineo你能解決它嗎? – Sikorski

回答

0

的配置是正確的,但你可以注入的EntityManager而不是SessionManager。

如您所知,EntityManager與JPA協同工作,SessionManager與Hibernate協同工作。

請檢查您的DAO,並使您剛剛注入SessionManager。

在你的問題是與spring boot

相關問題