результаты запроса с помощью hibernate-поиска со связанным полем перечисления - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь создать индекс документа для сущности, которая имеет следующие ассоциации:

DocVersion:

@Entity
@Indexed
public class DocVersion implements Serializable {
...
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "doc_uuid")
    @IndexedEmbedded
    private Document2 document2;
...
}

Document2:

@Entity
@Indexed
public class Document2 implements Serializable {
...
    @Column(name = "entityState")
    @Enumerated(EnumType.STRING)
    @Field(bridge=@FieldBridge(impl=EnumBridge.class), index=Index.YES)
    private EDocState eDocState;
...
}

вот как язапросить индекс (только для целей тестирования):

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
        try {
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
                .buildQueryBuilder()
                .forEntity(DocVersion.class)
                .get();

        org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword()
                .onField("document2.eDocState").matching("HARD_DEL")
                .createQuery();
List results = fullTextEntityManager.createFullTextQuery(luceneQuery, DocVersion.class)
                .getResultList();

, но вместо результатов я получаю:

WARNING: org.hibernate.search.bridge.BridgeException: Exception while calling bridge#objectToString
    entity class: com.nws.vedica.model.entity.DocVersion
    entity property path: document2.eDocState
    field bridge: TwoWayString2FieldBridgeAdaptor [stringBridge=org.hibernate.search.bridge.builtin.EnumBridge@60942b8b]

Так что это значит?Нужно ли реализовать какой-то конкретный мост для перечисления (как это будет выглядеть)?Это просто значение enum, поэтому я думаю, что проблема в другом месте.

Пожалуйста, помогите мне получить результаты.

Пакет, который я использую: hibernate-search-orm: 5.9.3.

1 Ответ

0 голосов
/ 22 ноября 2018

Вам не нужно реализовывать конкретный мост, на самом деле все наоборот: мост уже существует, поэтому Hibernate Search ожидает, что вы передадите значения enum в запрос, и вместо этого вы передадите значения String.

Попробуйте заменить .matching("HARD_DEL") на .matching(EDocState.HARD_DEL).

Примечание: я подозреваю, что остальная часть трассировки стека скажет вам что-то об исключении приведения класса, которое могло бы вас предупредить.Ради вас, вы, вероятно, не должны скрывать такие трассировки стека, так как они могут содержать ценную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...