2017-11-10 3 views
3

인덱싱 된 생성 타임 스탬프가 java.time.Instant 인 엔티티가 있습니다. 생성 타임 스탬프 범위로 검색 결과를 파셋하고자합니다.
기업은 다음과 같은 방법을 찾습니다인스턴트 범위에 의한 Facade Hibernate 검색 결과가 실패했습니다.

@Entity 
@Indexed 
public class Document { 

    @Id 
    @DocumentId 
    private Long id; 

    @Field 
    private String name; 

    @Field(analyze = Analyze.NO) 
    @Facet 
    private Instant creationTimestamp; 
} 

나는 다음과 같은 오류가 내 응용 프로그램을 시작할 때 : hibernate documentation에서 인스턴트 값으로 패 시팅 관련

org.hibernate.search.exception.SearchException: HSEARCH000264: @Facet is not supported for type 'java.time.Instant'. See org.hibernate.search.bugs.Document#creationTimestamp 

내가 발견하지 않은 아무것도.

생성 타임 스탬프 범위를 기준으로 최대 절전 모드 검색 결과를 제거 할 수 있습니까?

여기 실패한 테스트 케이스 생성 한 : github repo link

답변

1

을 나는 자바 8 날짜/시간 형식이 아직 하이버 네이트 검색 시팅 서브 시스템에서 지원되지 않습니다 두려워 해요. 나는이 문제를 해결하기 위해 티켓을 만들었지 만 우리가 (내부 합병증이있는) 때 말할 수 없다 : https://hibernate.atlassian.net/browse/HSEARCH-2954 한편

, 당신은 타임 스탬프를 나타내는 @Transient 길이의 필드를 사용하여 지원의 부족 해결할 수 있습니다 :

@Entity 
@Indexed 
public class Document { 

    @Id 
    @DocumentId 
    private Long id; 

    @Field 
    private String name; 

    private Instant creationTimestamp; 

    @Field(analyze = Analyze.NO) 
    @Facet 
    @javax.persistence.Transient 
    public Long getCreationForFaceting() { 
     return creationTimestamp == null ? null : creationTimestamp.toEpochMilli(); 
    } 
} 

그리고 긴 시간 소인도 사용하여 질의합니다.

긴 샷으로는 이상적인 해결책은 아니지만 생각할 수있는 유일한 방법입니다.

관련 문제