2017-10-04 107 views
0

我們提供一流的例子:Hibernate Search的

抽象類SuperParent { superParentField1; }

抽象類父擴展SuperParent {parent} parentField1; }

類ImplementaingClass1擴展父{// 我想指數parentField1只 }

類ImplementingClass2擴展父{// 我想指數superParentField1只 }

和變化,從這些。

是什麼在休眠搜索來處理這個最好的方法?所以我可以在任何一個班級的任何領域進行搜索。我是否需要重寫實現類上的字段並在其中添加註釋?沒有其他辦法嗎?

回答

2

覆蓋getter和添加的重寫吸氣劑@Field註釋:

abstract class SuperParent { superParentField1; } 

abstract class Parent extends SuperParent { parentField1; } 

@Indexed 
class ImplementingClass1 extends Parent { 
    @Override 
    @Field(... stuff ...) 
    SomeType getParentField1() { 
    return super.getParentField1(); 
    } 
} 

@Indexed 
class ImplementingClass2 extends Parent { 
    @Override 
    @Field(... stuff ...) 
    SomeType getSuperParentField1() { 
    return super.getSuperParentField1(); 
    } 
} 

或者,使用programmatic mapping。如果你有超過幾個這樣的約束的領域,這將是特別相關的。

+0

我知道了,謝謝。這正是我想要避免的。你知道,如果我在@DocumentId註釋,當我進行擴展和延伸類不與@Indexed註釋的SuperParent實體有一個id字段將發生什麼?我只是想確保它不會導致任何問題。謝謝。 – czetsuya

+0

@czetsuya如果你真的想避免這種情況,你可以使用編程映射作爲我的回答末尾提到。這有點複雜,但更靈活。關於你的問題,只有'@ Indexed'類型會被索引,所以你可以在一個超類型中添加一個'@ DocumentId',它不應該影響非'@ Indexed'子類型,並且應該使用'@ Indexed'子類型。 –

+0

謝謝。我想我可以忍受它:-)。 – czetsuya

相關問題