Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于多类层次结构的Hibernate搜索_Hibernate_Hibernate Search - Fatal编程技术网

基于多类层次结构的Hibernate搜索

基于多类层次结构的Hibernate搜索,hibernate,hibernate-search,Hibernate,Hibernate Search,让我们提供一个类示例: 抽象类超级parent{ 超级砂场1; } 抽象类父级扩展了SuperParent{ 父字段1; } 类实现GClass1扩展了父类{ //我只想索引parentField1 } 类实现Class2扩展了父类{ //我只想索引superParentField1 } 和这些的变化 在hibernate搜索中处理此问题的最佳方法是什么?所以我可以在任何给定类的任何字段上进行搜索。我是否需要重写实现类上的字段并在其中添加注释?没有其他方法吗?重写getter并在重写的gette

让我们提供一个类示例:

抽象类超级parent{ 超级砂场1; }

抽象类父级扩展了SuperParent{ 父字段1; }

类实现GClass1扩展了父类{ //我只想索引parentField1 }

类实现Class2扩展了父类{ //我只想索引superParentField1 }

和这些的变化


在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我恐怕需要更多信息,特别是代码和堆栈跟踪。也许编辑这个问题,或者打开另一个问题?