gpt4 book ai didi

hibernate - Hibernate Search 如何处理从父类(super class)继承的注释?

转载 作者:行者123 更新时间:2023-12-02 22:47:34 24 4
gpt4 key购买 nike

我在使用这些实体创建正确的索引结构时遇到问题:

@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
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class PersonRole implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "personrolegen")
@SequenceGenerator(name = "personrolegen", sequenceName = "person_role_id_seq")
protected Long id;

@MapsId
@ManyToOne(optional = false, cascade = { CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE })
@IndexedEmbedded(depth = 4)
protected Person person;
}

人才

@Entity
@Indexed
public class Talent extends PersonRole implements Serializable {
@Field
private String email;
}

在此模型中,一个Person可以拥有一个或多个PersonRole。从历史上看,索引一直是相反的,即从Talent开始并包括Person。但是,当我部署并保存一些 Talent 实例时,查看索引,人才索引中没有 person.firstname (或任何 person 属性)。

我还尝试了相反的工作方式,切换 @ContainedIn@IndexedEmbedded,从而在 Person 中包含 Talent code> 的索引,但这也不起作用 - 我的个人索引中没有 talent.email

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

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

最佳答案

尽管OP的原始问题已经解决,问题的答案如下:Hibernate Search will tr​​eat returned, @Field -注释属性作为该类的属性/字段,并将相应地对它们进行索引(甚至父类(super class)的 @IndexedEmbedded 属性也将被索引,无需额外的配置/工作)。

关于hibernate - Hibernate Search 如何处理从父类(super class)继承的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com