2013-05-05 77 views
3

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

Hibernate搜索文档并没有详细说明如何处理继承以及它们如何与@IndexedEmbedded注释一起使用。我尝试了只提供c.getD作为includePath的朴素方法,希望c的子类的getD实现会自动被使用。

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

行的事谁知道如何设置的搜索路径或为了得到由FieldBridge实施为索引创建的字符串改变以任何其他方式的代码:运行服务器时,这将导致以下SearchException 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 
    } 
} 

回答

1

这是目前不可能的。元数据是根据静态类信息构建的,而不是实际的运行时类型。当构建元模型时也无法确定哪些类扩展了C