0

상속 및 ElasticsearchRepository에 약간의 문제가 있습니다. 내 코드 (짧은 버전) : 엔티티 :스프링 데이터 elasticsearch 상속 질문이 없습니다

public abstract class father{ 
    @Id 
    protected String identifier; 

    // constructors 
    @Field(type= FieldType.String, index = FieldIndex.not_analyzed) 
    public String uri; 
    // getter setter 
} 

/* 
* Stored in elastic search 
*/ 
@Document(indexName = "entity1", type = "entity1") 
public abstract class sonA extends father{ 
    // constructors 
} 

/* 
* Stored in elastic search 
*/ 
@Document(indexName = "entity2", type = "entity2") 
public abstract class sonB extends father{ 
    // constructors 
} 

저장소 :

public interface DataBnfRepository extends 
     ElasticsearchRepository<SonA, String> { 

    public SonA findByUri(String uri); 

    @Query("{ \"filtered\":{ \"filter\":{\"term\":{\"uri\":\"?0\"}}}}") 
    public SonA findWithUri(String uri); 
} 

내 문제 : 나는 그들을 retreive하는 탄성 검색에 데이터를 넣어하지만 수 있어요. repository.findall()을 사용하면 작동합니다. 나는 repository.findWithUri(uri)을 할 경우 은 내가 exemples를 검색하려고 (널 결과) findByUri

에 대한 구문 분석 예외 작동하지 않습니다 https://github.com/spring-projects/spring-data-elasticsearch/blob/master/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java 을하지만 아무도 저장소가 없습니다.

내가 발견 한 것 : "foo"로 uri를 바꾸면 작동합니다. 바 => 구문 분석 예외 : 그래서 문제는

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters 그래서 내가

URI = foo는 함께 시험을 만들어 함께.

uri = "foo : bar"=> 구문 분석 예외.

uri = foo \ : bar => 구문 분석 예외.

URI = "foo는 \ 표시 줄"=> 구문 분석 예외가 나는 코드에 문제가 없었 상속되기 전에

. URI를 객체 repository.save(object)repository.findWithUri(uri)에 넣으면 객체가 생깁니다.

모든 도움/제안/의견을 보내 주시면 대단히 감사하겠습니다. 부디. 고마워요

답변

0

다음 방법을 시도해보십시오.

findByFatherUri(uri); 

이것은 하위 항목에서 작동하는 방식입니다. 확장 클래스에서도 마찬가지라고 생각합니다. Spring Data의 관점에서 Main 클래스는 DataBnfRepository의 SonA이고 id는 findOne 메소드를 사용할 때 저장소에 링크 된 ID입니다. 개체를 찾기 위해 사용하려는 필드로 자식 클래스를 탐색해야합니다. 100 % 확신 할 수 없으므로 일단 시도하면이 사실을 알려주세요.

+0

현재 작동하지 않습니다. 오류가 있습니다 : No 속성 FatherUri가 SonA 유형으로 발견되었습니다. 그러나 도움을 주셔서 감사합니다, 나는이 가능한 해결책을 고대하고 있습니다, 어쩌면 그것을하는 속임수가 있습니다. –

+0

오케이, 죄송합니다. 빠른 질문이지만, 'DataBnfEntity'는 무엇입니까? 소나와 어떻게 관련이 있니? 이것들은 같은가요? 그것들이 동일하다면, 왜 당신은 그것을 추상 클래스로 가지게되는 걸까요? 'DataBnfEntity'가 sonA의 부모라면,'findByDataBnfEntitySonAFatherUri (uri)'와 같이'DataBnfEntity'에서'Father'까지 트래버스해야합니다. – techtabu

+0

죄송합니다. 이름도 잊어 버렸습니다. DataBnfEntity => SonA (RDF 데이터베이스에서 작업하지만 정보를 필터링 함) 질문을 편집했습니다. 죄송합니다. –