2013-05-05 36 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