2017-01-19 2 views
0

매우 기본적인 FieldBridge 구현이 작동하지 않는 것 같습니다. 색인 생성 프로세스가 @FieldBridge 주석을 완전히 무시하는 것처럼 보입니다.사용자 정의 FieldBridge 구현으로 필드를 찾을 수 없습니다.

public class LocalisedInformationBridge implements FieldBridge { 

    @Override 
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) { 

     luceneOptions.addFieldToDocument(name + ".test", "test", document); 

    } 
} 

엔티티를 @FieldBridge 주석과 : 여기

는 구현의

@OneToMany(mappedBy = "product") 
@MapKey(name = "languageCode") 
@IndexedEmbedded 
@FieldBridge(impl = LocalisedInformationBridge.class) 
private Map<String, LocalisedProductInformation> localisedProductInformation; 

포함 된 개체 : 나는 localisedProductInformation.test 필드에서 검색 할 때

@ManyToOne 
@JoinColumn(name="productId") 
@ContainedIn 
private Product product; 

, 난 예외 발생 :

org.hibernate.search.exception.SearchException는 : 필드를 localisedProductInformation.test

다음

것은 내가 어떻게 색인있어 데이터를 찾을 수 없습니다가 :

FullTextEntityManager fullTextEntityManager = 
     Search.getFullTextEntityManager(entityManager); 
fullTextEntityManager.createIndexer().startAndWait(); 

이상한 것은이 때 I LocalisedInformationBridge 클래스의 set 메서드에 중단 점을 넣으면 디버거가 프로그램 실행을 중지하지 않습니다. 내가 여기서 빠져있는 뭔가가 아주 명백한가요?

+0

경로에 있는지,로드 중입니까? 메시지를 인쇄하는 기본 생성자와 같은 무언가를하십시오. 이 방식으로 적어도로드되고 있음을 알 수 있습니다. – efekctive

+0

로그에 모든 엔티티가 다시 색인되었다는 메시지가 표시되며 생성자에서 메시지를 인쇄하면 모든 엔티티에 대해 볼 수 있습니다. – fuudge

+0

컨테이너가 구현 내용을 어떻게 알 수 있습니까? 그 색인에 대한거야? – efekctive

답변

0

컨테이너 속성 (배열, 컬렉션 또는 맵)에 @IndexedEmbedded을 사용하면 @Field 주석에 정의 된 모든 필드 브리지가이 속성 값의 요소에 적용됩니다. 따라서 필드 브리지는지도 자체가 아닌지도의 값에 적용됩니다. 지도가 비어 있으면 필드 브리지가 전혀 적용되지 않습니다. 이게 당신 사건입니까?

이 동작은 조금 이상합니다 (주어진 @IndexedEmbedded은 약간 다른 목적을 가지고 있습니다).하지만 이전에 소개되었으므로 고쳐서 사용하는 사용자가 회귀하게됩니다. 따라서 새로운 주요 버전이 출시 될 때까지이 방법으로 계속 유지 될 것입니다 ...

+0

예, 그렇습니다. IndexedEmbedded 주석을 제거하면 제대로 작동하기 시작했습니다. 나는 IndexedEmbedded 어노테이션이 ContainedIn 어노테이션에 대해 관계의 다른 쪽에서 작동하는 데 필요한지 궁금하거나 아니면 독자적으로 사용할 수 있습니까? – fuudge

+0

@fuudge'@IncludedIn' 주석이 작동하기 위해'@ IndexedEmbedded' 주석이 필요하지 않습니다. 당신은 자신의 현장 교량을 사용한다고 가정 할 때, 그것없이 괜찮습니다. –