基于多类层次结构的Hibernate搜索
让我们提供一个类示例: 抽象类超级parent{ 超级砂场1; } 抽象类父级扩展了SuperParent{ 父字段1; } 类实现GClass1扩展了父类{ //我只想索引parentField1 } 类实现Class2扩展了父类{ //我只想索引superParentField1 } 和这些的变化基于多类层次结构的Hibernate搜索,hibernate,hibernate-search,Hibernate,Hibernate Search,让我们提供一个类示例: 抽象类超级parent{ 超级砂场1; } 抽象类父级扩展了SuperParent{ 父字段1; } 类实现GClass1扩展了父类{ //我只想索引parentField1 } 类实现Class2扩展了父类{ //我只想索引superParentField1 } 和这些的变化 在hibernate搜索中处理此问题的最佳方法是什么?所以我可以在任何给定类的任何字段上进行搜索。我是否需要重写实现类上的字段并在其中添加注释?没有其他方法吗?重写getter并在重写的gette
在hibernate搜索中处理此问题的最佳方法是什么?所以我可以在任何给定类的任何字段上进行搜索。我是否需要重写实现类上的字段并在其中添加注释?没有其他方法吗?重写getter并在重写的getter上添加
@字段
注释:
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();
}
}
或者,使用。如果有多个字段具有此类约束,则这一点尤其重要。重写getter并在重写的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();
}
}
或者,使用。如果您有多个字段具有此类约束,则这一点尤其重要。我明白了,谢谢。这就是我想要避免的。当我扩展SuperParent实体时,如果在该实体中有一个id字段用@DocumentId注释,而扩展类没有用@Indexed注释,你知道会发生什么吗?我只是想确保它不会引起任何问题。谢谢。@czetsuya如果您真的想避免这种情况,您可以使用我在答案末尾提到的编程映射。它有点复杂,但更灵活。关于您的问题,只有
@Indexed
类型将被索引,因此您可以在超类型中添加@DocumentId
,它不应影响非@Indexed
子类型,并应与@Indexed
子类型一起使用。谢谢。我想我可以接受:-)。@Yoaan,这种方法似乎不适用于facet?找不到具有刻面批注的字段。请注意,id还带有DocumentId注释。@czetsuya我恐怕需要更多信息,特别是代码和堆栈跟踪。也许编辑这个问题,或者打开另一个问题?我明白了,谢谢。这就是我想要避免的。当我扩展SuperParent实体时,如果在该实体中有一个id字段用@DocumentId注释,而扩展类没有用@Indexed注释,你知道会发生什么吗?我只是想确保它不会引起任何问题。谢谢。@czetsuya如果您真的想避免这种情况,您可以使用我在答案末尾提到的编程映射。它有点复杂,但更灵活。关于您的问题,只有@Indexed
类型将被索引,因此您可以在超类型中添加@DocumentId
,它不应影响非@Indexed
子类型,并应与@Indexed
子类型一起使用。谢谢。我想我可以接受:-)。@Yoaan,这种方法似乎不适用于facet?找不到具有刻面批注的字段。请注意,id还带有DocumentId注释。@czetsuya我恐怕需要更多信息,特别是代码和堆栈跟踪。也许编辑这个问题,或者打开另一个问题?