Java NullPointerException&;创建名为';实体管理工厂&x27;来自Hibernate配置类(使用spring数据jpa)
在我的hibernate配置类显示Nullpointerexception之后,我更新了项目中的一些依赖项 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案 我已经尝试过的一些解决方案: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
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