春季4 +春季仓库+休眠5:错误创建java配置

问题描述:

我有春季4应用程序,我想使用春季仓库。我想包括弹簧jpa_hibernate春季4 +春季仓库+休眠5:错误创建java配置

compile 'org.springframework.data:spring-data-jpa:1.11.4.RELEASE' 
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.0.5.Final' 

,并创建配置像oficial spring doc

@Configuration 
@ComponentScan("my.domain") 
@EnableJpaRepositories("my.domain") 
@EnableTransactionManagement 
public class ApplicationConfiguration { 

    @Bean 
    public Config getConfig() { 
     return ConfigLoader.load(); 
    } 

    @Bean 
    @Autowired 
    public DataSource getDatasource(Config config) throws Exception { 
     Properties props = new Properties(); 
     Config dbConfig = config.getConfig("db.config"); 
     dbConfig.entrySet().forEach(entry -> props.put(entry.getKey(), entry.getValue().unwrapped())); 
     return new DataSourceFactory().createDataSource(props); 
    } 

    @Bean 
    @Autowired 
    public NamedParameterJdbcTemplate getJdbcTemplate(DataSource datasource) { 
     return new NamedParameterJdbcTemplate(datasource); 
    } 

    @Bean 
    @Autowired 
    public PlatformTransactionManager getTransactionManager(DataSource datasource) { 
     return new DataSourceTransactionManager(datasource); 
    } 

    @Bean 
    @Autowired 
    public EntityManagerFactory entityManagerFactory(DataSource datasource) { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setDataSource(datasource); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 
    } 

    @Bean 
    @Autowired 
    public PlatformTransactionManager transactionManager(DataSource datasource) { 

     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory(datasource)); 
     return txManager; 
    } 
} 

,但我得到的错误,当试图运行的应用程序:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in my.ApplicationConfiguration: 
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate 
[javax.persistence.EntityManagerFactory]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.IllegalStateException: 
Failed to determine Hibernate PersistenceProvider 

我以前在springboot和配置存储库中的文件,但我没有发现为java配置弹簧worck实际的例子(不开机只有简单的核心应用程序)

+0

pls show full stacktrace – xyz

+0

这是完整的堆栈跟踪 – user5620472

当你正在使用最新的Spring数据发布,升级到最新的Hibernate版本:

compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.10.Final' 

春天需要休眠的EntityManagerFactory实现其previosly是由单独的jar现在已不建议配置的,所以你只需要单hibernate-core依赖。

还要考虑使用以下配置:

@Configuration 
@ComponentScan("my.domain") 
@EnableJpaRepositories("my.domain") 
@EnableTransactionManagement 
public class ApplicationConfiguration { 

    @Bean 
    public Config getConfig() { 
     return ConfigLoader.load(); 
    } 

    @Bean 
    public DataSource getDatasource(Config config) throws Exception { 
     Properties props = new Properties(); 
     Config dbConfig = config.getConfig("db.config"); 
     dbConfig.entrySet().forEach(entry -> props.put(entry.getKey(), entry.getValue().unwrapped())); 
     return new DataSourceFactory().createDataSource(props); 
    } 

    @Bean 
    public NamedParameterJdbcTemplate getJdbcTemplate(DataSource datasource) { 
     return new NamedParameterJdbcTemplate(datasource); 
    } 

    @Bean 
    @Autowired 
    public PlatformTransactionManager getTransactionManager(DataSource datasource) { 
     return new DataSourceTransactionManager(datasource); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setDataSource(dataSource()); 
     factory.setPackagesToScan("my.domain"); 

     return factory; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory); 

     return txManager; 
    } 

} 

你被referencsing老泉的数据文件,目前版本为available here