Java NullPointerException&;创建名为';实体管理工厂&x27;来自Hibernate配置类(使用spring数据jpa)

Java NullPointerException&;创建名为';实体管理工厂&x27;来自Hibernate配置类(使用spring数据jpa),java,mysql,spring,hibernate,hikaricp,Java,Mysql,Spring,Hibernate,Hikaricp,在我的hibernate配置类显示Nullpointerexception之后,我更新了项目中的一些依赖项 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案 我已经尝试过的一些解决方案: 使用@bean(name=“entityManagerFactory”)提供bean名称 提供类似@EnableJpaRepositories(basePackages=“com.carportal.repository”,entit

在我的hibernate配置类显示Nullpointerexception之后,我更新了项目中的一些依赖项

我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案

我已经尝试过的一些解决方案:

  • 使用@bean(name=“entityManagerFactory”)提供bean名称
  • 提供类似@EnableJpaRepositories(basePackages=“com.carportal.repository”,entityManagerFactoryRef)的引用 =“EntityManager工厂”)
  • 通过更改方言,通过更改DriverClassName,通过更改数据源管理器
  • 我面临的问题

    19:29:11.756 [main] ERROR o.s.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.carportal.config.HibernateConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4683)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
        at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
        at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
        ... 45 common frames omitted
    Caused by: java.lang.NullPointerException: null
        at com.carportal.config.HibernateConfig.additionalProperties(HibernateConfig.java:74)
        at com.carportal.config.HibernateConfig.entityManagerFactory(HibernateConfig.java:46)
        at com.carportal.config.HibernateConfig$$EnhancerBySpringCGLIB$$f78c3ea8.CGLIB$entityManagerFactory$3(<generated>)
        at com.carportal.config.HibernateConfig$$EnhancerBySpringCGLIB$$f78c3ea8$$FastClassBySpringCGLIB$$e9aea17b.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at com.carportal.config.HibernateConfig$$EnhancerBySpringCGLIB$$f78c3ea8.entityManagerFactory(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 46 common frames omitted
    
    db.properties

    @Configuration
    @EnableTransactionManagement
    @PropertySource({ "classpath:db.properties" })
    @ComponentScan({ "com.carportal.model", "com.carportal.repository", "com.carportal" })
    @EnableJpaRepositories(basePackages = "com.carportal.repository")
    public class HibernateConfig {
    
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Autowired
        private static Environment env;
    
        @Bean
        public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
            logger.debug("Local Container Entity Manager Factory Bean");
            LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
            em.setDataSource(dataSource());
            em.setPackagesToScan("com.carportal");
            JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
            em.setJpaVendorAdapter(vendorAdapter);
            em.setJpaProperties(additionalProperties());
            return em;
        }
    
        @Bean
        public DataSource dataSource() throws NamingException {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/carportadb");
            dataSource.setUsername("sam");
            dataSource.setPassword("root");
            return dataSource;
        }
    
        @Bean
        public PlatformTransactionManager transactionManager() throws NamingException {
            JpaTransactionManager transactionManager = new JpaTransactionManager();
            transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
            return transactionManager;
        }
    
        @Bean
        public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
            return new PersistenceExceptionTranslationPostProcessor();
        }
    
        Properties additionalProperties() {
            Properties hibernateProperties = new Properties();
            hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
            hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
            hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
            hibernateProperties.setProperty("hibernate.cache.region.factory_class",
                    env.getProperty("hibernate.cache.region.factory_class"));
            hibernateProperties.setProperty("hibernate.cache.use_query_cache",
                    env.getProperty("hibernate.cache.use_query_cache"));
            hibernateProperties.setProperty("hibernate.dialect.storage_engine",
                    env.getProperty("hibernate.dialect.storage_engine"));
    
            /*
             * hibernateProperties.put(CONNECTION_PROVIDER,
             * env.getProperty("hibernate.connection.provider_class"));
             */
    
            hibernateProperties.setProperty("hibernate.cache.use_second_level_cache",
                    env.getProperty("hibernate.cache.use_second_level_cache"));
    
            return hibernateProperties;
        }
    
    }
    
    # jdbc
    jdbc.driverClassName=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/carportadb
    jdbc.user=sam
    jdbc.pass=root
    
    
    # hibernate
    hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
    hibernate.dialect.storage_engine=InnoDBStorageEngine
    hibernate.show_sql=true
    hibernate.hbm2ddl.auto=create
    
    hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
    #hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
    hibernate.dialect.storage_engine=InnoDBStorageEngine
    hibernate.cache.use_second_level_cache=false
    hibernate.cache.use_query_cache=false
    

    Stackstrace说您的方法com.carportal.config.HibernateConfig.additionalProperties()中有一个NullPointerException

    在这里,您尝试使用自动连接字段“env”


    据我所知,无法自动关联静态字段(另请参见)。尝试删除字段上的静态设置。

    为什么要手动配置而不是使用Boot?@chrylis onstrike-。。。我知道使用spring boot,我们没有配置相关的负担,但我只是想练习很多小事情,比如entitymanagerfactory&sessionfactory、PlatformTransactionManager&JpaTransactionManager,LocalContainerEntityManagerFactoryBean&LocalEntityManagerFactoryBean和一些不同类型的连接池只是为了让事情变得更清楚而犯了一些错误。当然,这是您的选择,但这种“实践”可能对您没有用处。自2013年以来,我从未进行过手动配置;现在根本不需要它。从我的角度来说,使用静态是一个太严重的错误,谢谢你的帮助。@omido你能帮我完成Hikari连接池配置吗。@ShambhuGohel我是glab,我可以帮你。我没有使用Hikari连接池的实际经验。
    # jdbc
    jdbc.driverClassName=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/carportadb
    jdbc.user=sam
    jdbc.pass=root
    
    
    # hibernate
    hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
    hibernate.dialect.storage_engine=InnoDBStorageEngine
    hibernate.show_sql=true
    hibernate.hbm2ddl.auto=create
    
    hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
    #hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
    hibernate.dialect.storage_engine=InnoDBStorageEngine
    hibernate.cache.use_second_level_cache=false
    hibernate.cache.use_query_cache=false