2013-12-14 1 views
0

У меня есть следующие бобхранилище Spring Data бросает NPE на создание

@Entity 
@Access(AccessType.FIELD) 
public class Child { 

    @Id @GeneratedValue 
    private Long id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Parent parent; 
} 

я объявил репозиторий

public interface ChildRepository extends CrudRepository<Child, Long> { 

    List<Child> findByParent(Parent parent); 

} 

который autowired в контроллере

@Controller 
public class AController { 
    @Autowired private ChildRepository childRepository; 
} 

Запуск сервера Я получаю следующую ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private ChildRepository aController.childRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'childRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
... 

Если я удаляю метод findByParent, все в порядке. В чем может быть проблема?

Я использую spring-data-jpa: 1.4.2.RELEASE и datanucleus-accessplatform-jpa-rdbms: 3.3.4.

Это полный стек

QueryUtils.getOrCreateJoin(From<?,?>, String) line: 511 
QueryUtils.toExpressionRecursively(From<?,?>, PropertyPath) line: 453 
JpaQueryCreator$PredicateBuilder.build() line: 197 
JpaCountQueryCreator(JpaQueryCreator).toPredicate(Part, Root<?>) line: 144 
JpaCountQueryCreator(JpaQueryCreator).create(Part, Iterator<Object>) line: 86 
JpaCountQueryCreator(JpaQueryCreator).create(Part, Iterator) line: 44 
JpaCountQueryCreator(AbstractQueryCreator<T,S>).createCriteria(PartTree) line: 109 
JpaCountQueryCreator(AbstractQueryCreator<T,S>).createQuery(Sort) line: 88 
JpaCountQueryCreator(AbstractQueryCreator<T,S>).createQuery() line: 73 
PartTreeJpaQuery$CountQueryPreparer(PartTreeJpaQuery$QueryPreparer).<init>(PartTreeJpaQuery, boolean) line: 98 
PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery, boolean) line: 186 
PartTreeJpaQuery.<init>(JpaQueryMethod, EntityManager) line: 60 
JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryMethod, EntityManager, NamedQueries) line: 90 
JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryMethod, EntityManager, NamedQueries) line: 162 
JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy(JpaQueryLookupStrategy$AbstractQueryLookupStrategy).resolveQuery(Method, RepositoryMetadata, NamedQueries) line: 68 
RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport, RepositoryInformation, Object, Object) line: 290 
JpaRepositoryFactory(RepositoryFactorySupport).getRepository(Class<T>, Object) line: 158  
JpaRepositoryFactoryBean<T,S,ID>(RepositoryFactoryBeanSupport<T,S,ID>).getObject() line: 162  
JpaRepositoryFactoryBean<T,S,ID>(RepositoryFactoryBeanSupport<T,S,ID>).getObject() line: 44 
DefaultListableBeanFactory(FactoryBeanRegistrySupport).doGetObjectFromFactoryBean(FactoryBean<?>, String, boolean) line: 144  
DefaultListableBeanFactory(FactoryBeanRegistrySupport).getObjectFromFactoryBean(FactoryBean<?>, String, boolean) line: 103 
DefaultListableBeanFactory(AbstractBeanFactory).getObjectForBeanInstance(Object, String, String, RootBeanDefinition) line: 1514 
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class<T>, Object[], boolean) line: 252  
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class<T>) line: 200 
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class<T>, Object[], boolean) line: 273  
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 195 
DefaultListableBeanFactory.findAutowireCandidates(String, Class<?>, DependencyDescriptor) line: 1014  
DefaultListableBeanFactory.doResolveDependency(DependencyDescriptor, String, Set<String>, TypeConverter) line: 957 
DefaultListableBeanFactory.resolveDependency(DependencyDescriptor, String, Set<String>, TypeConverter) line: 855  
AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(Object, String, PropertyValues) line: 480 
InjectionMetadata.inject(Object, String, PropertyValues) line: 87 
AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(PropertyValues, PropertyDescriptor[], Object, String) line: 289 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String, RootBeanDefinition, BeanWrapper) line: 1185 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String, RootBeanDefinition, Object[]) line: 537 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String, RootBeanDefinition, Object[]) line: 475 
AbstractBeanFactory$1.getObject() line: 304 
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String, ObjectFactory<?>) line: 228 
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class<T>, Object[], boolean) line: 300  
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 195 
DefaultListableBeanFactory.preInstantiateSingletons() line: 700 
XmlWebApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory) line: 760 
XmlWebApplicationContext(AbstractApplicationContext).refresh() line: 482  
DispatcherServlet(FrameworkServlet).configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext) line: 643 
DispatcherServlet(FrameworkServlet).createWebApplicationContext(ApplicationContext) line: 606 
DispatcherServlet(FrameworkServlet).createWebApplicationContext(WebApplicationContext) line: 657  
DispatcherServlet(FrameworkServlet).initWebApplicationContext() line: 525 
DispatcherServlet(FrameworkServlet).initServletBean() line: 466 
DispatcherServlet(HttpServletBean).init() line: 136 
DispatcherServlet(GenericServlet).init(ServletConfig) line: 160 
StandardWrapper.initServlet(Servlet) line: 1280 
StandardWrapper.loadServlet() line: 1193  
StandardWrapper.load() line: 1088 
StandardContext.loadOnStartup(Container[]) line: 5176 
StandardContext.startInternal() line: 5460 
StandardContext(LifecycleBase).start() line: 150  
ContainerBase$StartChild.call() line: 1559 
ContainerBase$StartChild.call() line: 1549 
FutureTask$Sync.innerRun() line: 334  
FutureTask<V>.run() line: 166 
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145 
ThreadPoolExecutor$Worker.run() line: 615 
Thread.run() line: 724 

Понижение в весенне-данных: 1.3.0, решает эту проблему. У меня была аналогичная проблема. Spring data error

ответ

2

Это ошибка в DataNucleus. From.getJoins() возвращает null, если в настоящее время нет соединения, как вы можете видеть here. Я подал bug с DataNucleus и попросил парней вернуть пустую коллекцию (что было бы правильным поведением).

ОБНОВЛЕНИЕ: Энди уже исправил проблему и заявил, что она попадает в скороспуск 3.3.6. Тем временем вы можете захватывать ночные снимки here.