2016-07-05 2 views
0

私はelasticsearchインデックス内のエンティティを、hibernate-search-ormプロジェクトのMassIndexerシステムで再インデックスしたいと思います。hibernate-search MassIndexer ERROR

素晴らしいかもしれませんが;)しかし、それは私にいくつかの例外を教えてくれます。

しかしあなたは以下を参照することができますよう、例は基本的なものです:

  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) 
    

Javaプロジェクトの依存関係は、以下のとおりです。プロジェクトへ

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を提供するためにHibernate検索と統合し、他のフレームワークのためのものです外部から。 IDが外部に割り当てられている場合、MassIndexerはそれらを推測することができないため、これらを一緒に使用しないでください。

ProvidedIdのドキュメントを明確にするか、あまり混乱しないエラーが発生するとは思わないので、注釈を非推奨/削除することを試みます。報告ありがとう!

+0

関連する問題:https://hibernate.atlassian.net/browse/HSEARCH-1645 – Sanne

関連する問題