在 Tomcat 启动 SpringMVC 上:java.lang.NPE:无法调用“org.hibernate.boot.spi.MetadataImplementor.getEntityBindings()”,因为“this.metadata”为 null

问题描述 投票:0回答:1

我遇到以上错误

Getting  java.lang.NullPointerException: Cannot invoke "org.hibernate.boot.spi.MetadataImplementor.getEntityBindings()" because "this.metadata" is null

当我在 Spring MVC 项目中使用 Spring JPA 以编程方式配置 JPA EntityManagerFactory 时。当我启动 Tomcat 时会抛出此错误。

这里是相关的具体代码

@Configuration


@Bean
public DataSource dataSource() {
    try {
        
         SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
         Class<? extends Driver> driver = (Class<? extends Driver>) Class.forName("org.h2.Driver");
         dataSource.setDriverClass(driver);
         dataSource.setUrl("jdbc:h2:mem:test");
         dataSource.setUsername("SA");
         dataSource.setPassword("");
         return dataSource;
    } catch (Exception e) {
        System.out.println( e );
        logger.error("Embedded DataSource bean cannot be created!", e);
        return null;
    }
}

@Bean
public Properties hibernateProperties() {
    Properties hibernateProp = new Properties();
    hibernateProp.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
    hibernateProp.put("hibernate.hbm2ddl.auto", "create-drop");
    hibernateProp.put("hibernate.show_sql", true);
    hibernateProp.put("hibernate.max_fetch_depth", 3);
    hibernateProp.put("hibernate.jdbc.batch_size", 10);
    hibernateProp.put("hibernate.jdbc.fetch_size", 50);
    return hibernateProp;
}

@Bean
public PlatformTransactionManager transactionManager() {
    return new JpaTransactionManager(entityManagerFactory());
}

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(true);
    return vendorAdapter;
}


@Bean
public EntityManagerFactory entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setPackagesToScan("com.apress.prospring5.ch16.entities");
    factoryBean.setDataSource(dataSource());
    factoryBean.setJpaProperties(hibernateProperties());
    factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
    factoryBean.afterPropertiesSet();
    return factoryBean.getNativeEntityManagerFactory();
}


}

尝试使用 DataSource 进行各种配置。

hibernate spring-mvc jpa spring-data-jpa spring-orm
1个回答
0
投票

更新依赖版本:

implementation 'org.hibernate.orm:hibernate-core:6.3.1.Final'
© www.soinside.com 2019 - 2024. All rights reserved.