2016-12-27 1 views
0

Версия:Невозможно угадать FieldBridge в поиске 5.5. Неиндексированные Поля

  • Hibernate-Core: 5.2.5.Final
  • Hibernate-Поиск: 5.5.5.Final

Имея следующие отображения:

@Indexed 
@Entity 
@Table(name = "scanresult") 
public class ScanResult 
{ 
    @Id 
    private ScanResultKey id; 

    @Field 
    @Column(name = "name") 
    private String name; 
} 

@Embeddable 
public class ScanResultKey implements Serializable 
{ 
    @ManyToOne 
    @JoinColumn(name = "eA", referencedColumnName = "id") 
    private EntityA entA; 

    //others... 
} 

В предыдущих сообщениях я читал, что это было проблемой в Search 4.4 (при наличии составных идентификаторов и внешних связей), но это должно быть исправлено в 5.5. По-видимому, это моя вина. Но я не могу понять, что я мог сделать неправильно

Исключение:

org.hibernate.search.exception.SearchException: HSEARCH000135: Unable to guess FieldBridge for id in entities.keys.ScanResultKey 

Примечание: мне нужно только одно поле (name) индексироваться

Не могли бы вы указать, какие Я поступаю неправильно?

+0

Основная проблема заключается в предположении, что вам не нужно использовать поле FieldBridge. Можете ли вы указать пальцем на то, что привело вас к этому недоразумению? Я был бы рад попытаться улучшить документацию и сообщение об ошибке. – Sanne

+0

@ Спасибо за ваш ответ.Больше я глуп, а не проблема с документацией. Моя мысль заключалась в том, что Composite Key Class «Serializable», «Hibernate Search» может писать/воссоздавать его в/из индекса Lucene. И после того, как я пришел с этим решением, я понял, что мое предположение было неправильным. Но я не эксперт никоим образом, поэтому эту мысль не стоит принимать во внимание. Еще раз спасибо, Sanne – Eugene

+0

Хорошо, спасибо за отзыв! Я по-прежнему вижу, можем ли мы улучшить ясность сообщения об ошибке. – Sanne

ответ

1

ОК, Поскольку этот вопрос есть интерес рядом непревзойденными, согласно количеству просмотров, вот, вкратце, то, как мне удалось (надеюсь), чтобы решить эту проблему (Пожалуйста, поправьте меня, если вы знаете больше)

  • Проверка версий модулей совместимость

по словам одного из комментаторов в this SO вопрос, не все (даже самые последние) версии совместимы друг с другом. Например:

Hibernate Search 5.5 работает с Hibernate ORM 5.0.x и 5.1.x (НЕ с 5.2.x), и с Apache Lucene 5.3.x, 5.4.x и 5.5.x (не 6.0)

высказанной: Sanne

Это не исправление этой конкретной проблемы, но может спасти от других проблем

  • Cre съел FieldBridge для составного ключа, реализующего TwoWayFieldBridge

    общественного класса ScanResultBridge реализует TwoWayFieldBridge

  • Добавить аннотацию класса сущностей, с указанием реализации моста

    @FieldBridge (реализ = ScanResultBridge.class) частных ScanResultKey Я бы;

+0

Ваше решение верное, так как любой нетривиальный идентификатор будет нужен пользовательский FieldBridge. Чтобы использовать Hibernate ORM '5.2.x' получить спящий поиск' 5.7.x': http://hibernate.org/search/downloads/ – Sanne

Смежные вопросы