Java 访问自动连线存储库时出现NullPointerException
Java JPA配置文件的相关部分Java 访问自动连线存储库时出现NullPointerException,java,spring,jpa,Java,Spring,Jpa,Java JPA配置文件的相关部分 @Bean(name = "dataSource") public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); dataSource.se
@Bean(name = "dataSource")
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "transManager") @DependsOn("emf")
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory().getObject());
}
@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator() {
return new HibernateExceptionTranslator();
}
@Bean(name = "emf") @DependsOn("dataSource")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setShowSql(true);
vendorAdapter.setGenerateDdl(false);
vendorAdapter.setDatabase(Database.ORACLE);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.Oracle9Dialect");
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan(packagesToScan);
factory.setDataSource(dataSource());
factory.afterPropertiesSet();
return factory;
}
@Bean
public AppWindow mainBean() {
return new AppWindow();
}
我如何连接存储库:
@Autowired
private SomeRepository someRepository;
上下文:创建使用Spring数据进行数据库管理的Java7SE程序
问题:在尝试访问存储库时,我不断收到NullPointerException
堆栈跟踪:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainBean' defined in config.JpaConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [app.AppWindow]: Factory method 'mainBean' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
at app.App.main(App.java:12)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [app.AppWindow]: Factory method 'mainBean' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 12 more
Caused by: java.lang.NullPointerException
at app.AppWindow.loadFromDB(AppWindow.java:355)
at app.AppWindow.<init>(AppWindow.java:88)
at config.JpaConfig.mainBean(JpaConfig.java:71)
at config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960.CGLIB$mainBean$2(<generated>)
at config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960$$FastClassBySpringCGLIB$$d50a1d29.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318)
at config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960.mainBean(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 13 more
线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建config.JpaConfig中定义的名为“mainBean”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.BeanInstantiationException:未能实例化[app.AppWindow]:工厂方法“mainBean”引发异常;嵌套异常是java.lang.NullPointerException
位于org.springframework.beans.factory.support.ConstructorResolver.InstanceUsingFactoryMethod(ConstructorResolver.java:599)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.InstanceUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:772)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
位于app.app.main(app.java:12)
原因:org.springframework.beans.beans实例化异常:未能实例化[app.AppWindow]:工厂方法“mainBean”引发异常;嵌套异常是java.lang.NullPointerException
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:189)
位于org.springframework.beans.factory.support.ConstructorResolver.InstanceUsingFactoryMethod(ConstructorResolver.java:588)
... 还有12个
原因:java.lang.NullPointerException
在app.AppWindow.loadFromDB(AppWindow.java:355)
AppWindow.AppWindow.(AppWindow.java:88)
在config.JpaConfig.mainBean(JpaConfig.java:71)
位于config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960.CGLIB$mainBean$2()
在config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960$$FastClassBySpringCGLIB$$d50a1d29.invoke()处
位于org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
位于org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318)
在config.JpaConfig$$EnhancerBySpringCGLIB$$2699e960.mainBean()中
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:162)
... 还有13个
发生NullPointerException的方法:
private List<SomeObject> loadFromDB()
{return someRepository.retrieveAllByCodeLength(5);}
私有列表loadFromDB()
{return someRepository.retrieveAllByCodeLength(5);}
存储库代码:
public interface SomeRepository extends JpaRepository<SomeObject, Integer> {
@Query(" from SomeObject o where o.code = :code")
SomeObject findByCode(int code);
@Query(" from SomeObject o where o.description = :description")
SomeObject findByDescription(String description);
@Query(" from SomeObject o where LENGTH(o.code) = :length ORDER BY o.description")
List<SomeObject> retrieveAllByCodeLength(int length);
}
公共接口SomeRepository扩展了JpaRepository{
@查询(“来自某个对象,其中o.code=:code”)
SomeObject findByCode(int代码);
@查询(“来自某个对象,其中o.description=:description”)
SomeObject findByDescription(字符串描述);
@查询(“来自某个对象,其中长度(o.code)=:按o.description排序的长度”)
列出retrieveAllByCodeLength(int-length);
}
修复了它;已更改entityManagerFactory的emf。还必须在存储库查询中添加@Param。稍后将使用更正的代码进行更新。您不必注入工厂bean。您可以使用
PersistenceContext
注入EntityManager工厂或EntityManager本身。也就是说,你也不应该有NPE。因此,发布异常的堆栈跟踪和相关代码。当询问异常时,始终发布完整的异常堆栈跟踪。添加了堆栈跟踪以及我正在使用的存储库。异常将在AppWindow构造函数中引发。您没有发布它。我发布了它,请参阅“发生NullPointer的方法”。为了诊断问题,我建议您将调用存储库类的代码移动到PostConstruct
方法,并查看您是否仍然拥有NPE