Я пытаюсь создать индекс lucene для модели, частично состоящей из абстрактных классов. Скажем, я хочу проиндексировать класс A, у которого есть метод для возврата списка элементов класса B, каждый из которых имеет объект абстрактного класса C, который имеет абстрактный метод getD () для возврата списка элементов класса D. Класс E и F расширяют класс C и оба реализуют метод getD (), для которого я создал реализацию FieldBridge (реализует StringBridge) для преобразования результата в текстовый вывод, который будет использоваться для индекса.
Документация по поиску Hibernate не очень подробно описывает, как работать с наследованием и как их можно использовать вместе с аннотацией @IndexedEmbedded. Я попробовал наивный подход, просто предоставив c.getD как includePath, надеясь, что реализации getD подклассов c будут использоваться автоматически. Это приводит к следующему SearchException при запуске сервера:
org.hibernate.search.SearchException: Found invalid @IndexedEmbedded->paths configured on class A, member vragen: b.c.getD
Кто-нибудь знает, как задать путь поиска или изменить код любым другим способом, чтобы получить строку, созданную реализацией FieldBridge, в индексе для класса A? Код представлен ниже:
@Indexed
public class A {
@IndexedEmbedded(includePaths = { "c.getD" })
public List<B> getB() {
// Method implementation returning a list of B
}
}
public class B{
private C c;
}
public abstract class C{
public abstract List<D> getD();
}
public class E extends C{
@Field
@FieldBridge(impl = DListFieldBridge.class)
public List<D> getD() {
// Method implementation returning a list of D
}
}
public class F extends C{
@Field
@FieldBridge(impl = DListFieldBridge.class)
public List<D> getD() {
// Method implementation returning a list of D
}
}