2016-07-05 3 views
0

나는 elasticsearch 색인에서 엔터티를 hindnate-search-orm 프로젝트의 MassIndexer으로 다시 색인하고 싶습니다.최대 절전 모드 검색 MassIndexer 오류

큰 수 있습니다.;) 그러나 그것은 몇 가지 예외를 말해줍니다.

그러나 당신이 아래에 볼 수있는 예는 기본입니다 :

  1. 엔티티 :

    @Entity 
    @Table(name = "STUDENT") 
    @Indexed 
    @ProvidedId (bridge = @FieldBridge(impl = StudentFieldBridge.class)) 
    public class StudentEntity { 
    
        @EmbeddedId 
        private RegistrationId regid; 
    
        @Field 
        private String name; 
        ... 
    } 
    
  2. registrationId :

    @Embeddable 
    public class RegistrationId implements Serializable{ 
    
        @Column(name = "STUDENT_ID") 
        private int studentId; 
    
        @Column(name = "DEPARTMENT") 
        private String department; 
        ... 
    } 
    
  3. 학생 필드 다리 :

    public class StudentFieldBridge implements TwoWayStringBridge { 
    
        @Override 
        public Object stringToObject(String stringValue) { 
         String[] split = stringValue.split("_"); 
         RegistrationId ret = new RegistrationId(); 
         ret.setDepartment(split[0]); 
         ret.setStudentId(Integer.parseInt(split[1])); 
         return ret; 
        } 
    
        @Override 
        public String objectToString(Object object) { 
         RegistrationId id = (RegistrationId) object; 
         return id.getDepartment() + "_" + id.getStudentId(); 
        } 
    } 
    
  4. 질량 연동제

    @Test 
    public void massIndexation() throws InterruptedException { 
        EntityManager em = Persistence.createEntityManagerFactory("studentPu").createEntityManager(); 
        org.hibernate.Session hibernateSession = (Session)em.getDelegate(); 
        FullTextSession fullTextSession = Search.getFullTextSession(hibernateSession); 
        fullTextSession.createIndexer().startAndWait(); 
    } 
    
  5. 마지막 오류 :

    ERROR: HSEARCH000058: HSEARCH000212: An exception occurred while the MassIndexer was transforming identifiers to Lucene Documents 
    java.lang.NullPointerException 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getEntityName(CriteriaQueryTranslator.java:626) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:509) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:525) 
    at org.hibernate.criterion.InExpression.toSqlString(InExpression.java:43) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:400) 
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:106) 
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:75) 
    at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:80) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1760) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363) 
    at org.hibernate.search.batchindexing.impl.IdentifierConsumerDocumentProducer.loadList(IdentifierConsumerDocumentProducer.java:175) 
    at org.hibernate.search.batchindexing.impl.IdentifierConsumerDocumentProducer.loadAllFromQueue(IdentifierConsumerDocumentProducer.java:140) 
    at org.hibernate.search.batchindexing.impl.IdentifierConsumerDocumentProducer.run(IdentifierConsumerDocumentProducer.java:117) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:744) 
    

자바 프로젝트 종속성은 다음과 같습니다 프로젝트에

testCompile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.0.8.Final' 
testCompile group: 'org.hibernate', name: 'hibernate-search-orm', version: '5.6.0.Alpha3' 
testCompile group: 'org.hibernate', name: 'hibernate-search-backend-elasticsearch', version: '5.6.0.Alpha3' 

감사합니다 당신의 직업을위한 팀!

답변

0

이 작동합니다 :

@Entity 
@Table(name = "STUDENT") 
@Indexed 
public class StudentEntity { 

    @EmbeddedId 
    @DocumentId 
    @FieldBridge(impl = StudentFieldBridge.class) 
    private RegistrationId regid; 

    @Field 
    private String name; 

을 문제가 MassIndexer와 호환되지 않습니다 @ProvidedId 주석에 의해 발생합니다 : 그것은 직접 할당 된 ID를 제공하기 위해 최대 절전 모드 검색과 통합 다른 프레임 워크에 대한 의미 외부 적으로. ID가 외부 적으로 할당되면 MassIndexer는 추측 할 수 없으므로 함께 사용해서는 안됩니다.

ProvidedId에 대한 설명을 명확하게하려고합니다. 또는 혼동을 야기 할 것으로 예상하지 않았기 때문에 주석을 사용 중지/삭제할 수도 있습니다. 신고 해 주셔서 감사합니다.

+0

관련 문제 : https://hibernate.atlassian.net/browse/HSEARCH-1645 – Sanne