Java 访问自动连线存储库时出现NullPointerException

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

Java JPA配置文件的相关部分

    @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