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_Lucene_Hibernate Search - Fatal编程技术网

Hibernate搜索如何处理从超类继承的注释?

Hibernate搜索如何处理从超类继承的注释?,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,我无法使用这些实体创建正确的索引结构: 人 @Entity public class Person implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "person") @ContainedIn private Set<PersonRole> roles

我无法使用这些实体创建正确的索引结构:

@Entity
public class Person implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "person")
    @ContainedIn
    private Set<PersonRole> roles = new LinkedHashSet<>();

    @Field 
    private String firstname;

    // other properties, getter + setter
}
人才

@Entity
@Indexed
public class Talent extends PersonRole implements Serializable {
    @Field
    private String email;
}
在此模型中,
人员
可能有一个或多个
人员角色
s。历史上,该指数一直是另一种方式,即从
人才开始,包括
人。但是,当我部署并保存一些
人才
实例时,查看索引,人才索引中没有
person.firstname
(或任何person属性)

我也尝试了另一种方法,切换
@ContainedIn
@IndexedEmbedded
,从而将
人才
包含在
个人
的索引中,但这也不起作用-我的个人索引中没有
人才。电子邮件

我更喜欢历史结构,但如果有人能指出一种方法,使另一个方向更容易工作,那也是受欢迎的


Sanne说,类似的问题可能只能通过自定义的FieldBridge来解决,但Hibernate的JIRA对我来说已经过时了,我不知道如何在这里索引
人才的属性(这里有比这里显示的更多的方法,包括几个
@IndexedEmbedded
)。因此,如果有人能给我一个链接来解释这一点,我也很乐意接受。

即使OP的原始问题已经解决,问题的答案如下:Hibernate搜索将把继承的、带注释的属性作为该类的属性/字段,并相应地对它们进行索引(即使是
@IndexedEmbedded
超类的属性也将被编入索引,无需额外的配置/努力)。

您如何保存/搜索
人才
?我试用了您的代码,用
人保存了一个
人才
,并且能够通过Luke看到
人。firstName
保存在索引中(在使用“重建和编辑”按钮后,因为该字段没有保存),我可以通过搜索
名字来找到
人才
。保存的是人才上的一个简单的JPA entityManager.persist(),搜索是通过FullTextSession完成的,它通过一个标准QueryParser解析的lucene查询字符串来传递(没有花哨的分析仪或任何东西)。但是我事先和Luke检查了索引,它不包含人物子树。唉,我想是时候构建一个最小的示例了。谢谢验证!这太令人尴尬了:在重新导入人才、构建索引并重新启动应用程序后,搜索工作正常。我还可以使用“重建和编辑条目”验证确实出现在索引中。你完全应该得到这个提示的代表:)很高兴我能提供一些帮助!重构和编辑在调试我过去的索引相关问题时为我节省了大量时间,所以我很高兴我能说出这个词。
@Entity
@Indexed
public class Talent extends PersonRole implements Serializable {
    @Field
    private String email;
}