2017-10-04 195 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