如何处理@IndexedEmbedded includepaths中的抽象类型?

时间:2013-05-05 12:14:17

标签: hibernate-search

我正在尝试为部分由抽象类组成的模型创建lucene索引。假设我想索引类A,它有一个方法返回一个B类元素列表,它们都有一个抽象类C的对象,它有一个抽象方法getD()来返回一个D类元素列表。类E和F扩展了类C并且都实现了方法getD(),为此我创建了一个FieldBridge实现(实现StringBridge)以将结果转换为文本输出以用于索引。

Hibernate搜索文档并没有详细说明如何处理继承以及它们如何与@IndexedEmbedded批注一起使用。我尝试了只提供c.getD作为includePath的天真方法,希望自动使用c的子类的getD实现。运行服务器时,这会导致以下SearchException:

org.hibernate.search.SearchException: Found invalid @IndexedEmbedded->paths configured on class A, member vragen: b.c.getD

任何人都知道如何设置搜索路径或以任何其他方式更改代码,以便在A类索引中获取由FieldBridge实现创建的String?代码如下:

@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
    }
}

1 个答案:

答案 0 :(得分:1)

目前无法做到这一点。元数据是从静态类信息构建的,而不是实际的运行时类型。在构建元模型时,也无法确定哪些类扩展 C