2013-10-31 5 views
2

사용자 정의 저장소 메소드의 기능 (예 : spring data jpa)을 사용하려고했습니다. Spring 데이터 ElasticSearch 사용 중 Nullpointer 예외

내가 스프링 데이터 탄성 검색을 위해 구성된 패키지 저장소 인터페이스 가졌다 :

I는 TestrunSetRepositoryCustom 구현했다
public interface TestrunSetRepository extends ElasticsearchRepository<TestrunSetDocument, String>, TestrunSetRepositoryCustom { 

} 

public class TestrunSetRepositoryCustomImpl implements 
     TestrunSetRepositoryCustom { 

    private ElasticsearchTemplate elasticsearchTemplate; 

    public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { 
     this.elasticsearchTemplate = elasticsearchTemplate; 
    } 

    @Override 
    public List<String> getUniqueCategoriesDe() { 
     return null; 
    } 
} 

applicationContext.xml :

<elasticsearch:repositories base-package="some.repositories.es" /> 
<elasticsearch:transport-client id="esClient" 
    cluster-nodes="#{@'some.elasticsearch.cluster.nodes'}" 
    cluster-name="#{@'some.elasticsearch.cluster.name'}"/> 
<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"> 
    <constructor-arg name="client" ref="esClient"/> 
</bean> 
<bean id="testrunSetRepositoryCustom" 
    class="some.repositories.es.impl.TestrunSetRepositoryCustomImpl"> 
    <property name="elasticsearchTemplate" ref="elasticsearchTemplate"/> 
</bean> 

하지만 봄 문맥을 초기화하는 동안 나는이 예외를 가진다 :

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testrunSetRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1454) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:249) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:270) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
    ... 63 more 
Caused by: java.lang.NullPointerException 
    at org.springframework.data.elasticsearch.repository.support.MappingElasticsearchEntityInformation.<init>(MappingElasticsearchEntityInformation.java:53) 
    at org.springframework.data.elasticsearch.repository.support.MappingElasticsearchEntityInformation.<init>(MappingElasticsearchEntityInformation.java:49) 
    at org.springframework.data.elasticsearch.repository.support.ElasticsearchEntityInformationCreatorImpl.getEntityInformation(ElasticsearchEntityInformationCreatorImpl.java:46) 
    at org.springframework.data.elasticsearch.repository.query.ElasticsearchQueryMethod.<init>(ElasticsearchQueryMethod.java:42) 
    at org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactory$ElasticsearchQueryLookupStrategy.resolveQuery(ElasticsearchRepositoryFactory.java:108) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:290) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:162) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:44) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) 

답변

0

사용자 정의 클래스의 이름은 "저장소 인터페이스 이름"+ IMPL해야하며, 그 클래스는 사용자 정의 인터페이스를 (같은 사용자 인터페이스 저장소 인터페이스에 의해 확장되어야합니다)를 구현한다

예 :

//repository interface 
public interface ComplexElasticsearchRepository extends ElasticsearchRepository<SampleEntity, String>, ComplexElasticsearchRepositoryCustom { 

} 

//custom implementation 
public class ComplexElasticsearchRepositoryImpl implements ComplexElasticsearchRepositoryCustom { 
    public String doSomethingSpecial() { 
     return "2+2=4"; 
    } 
} 

//custome interface 
public interface ComplexElasticsearchRepositoryCustom { 
    public String doSomethingSpecial(); 
}