我需要帮助来实现特定的休眠继承映射

I need help to implement a specific hibernate Inheritance mapping

我有两个类、parent和child,在child这边我和它自己有关系。该数据库以两个单独的表为模型,parent 和 child 共享相同的“id”,列“holder”作为其自身的外键。我写了下面的代码。我正在学习,很快就陷入了这个继承和相互关系的复杂示例中,我想知道我是否正确使用了这些符号。

Person.class

@Entity
@Getter @Setter @NoArgsConstructor
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "person")
public class Person {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id")
  private Integer id;

  @NotNull
  @Column(name = "name")
  private String name;
}

Member.class

@Entity
@Getter @Setter @NoArgsConstructor
@Table(name = "member")
public class Member extends Person {

    @NotNull
    @Column(name = "member_type")
    private Integer memberType;

    @Column(name = "id_holder")
    private Integer idHolder;

    @ManyToOne(targetEntity = Member.class)
    @JoinColumn(name = "id_holder", referencedColumnName = "id", insertable = false, updatable = false)
    private Member holder;

    @OneToMany(mappedBy = "holder", cascade = CascadeType.ALL)
    private List<Member> dependents;
}

我将在前端填充这些实体的 object 是:

Member.model

export class Member {
    constructor(
        public id?: number,
        public name?: string,
        public memberType?: number,
        public idHolder?: any
    ) {}
}

回答我自己的问题:

正如我所说,我仍在学习 Spring Boot 和 Hibernate,我发现我的问题是典型的循环引用。我打破了我的循环参考设置我的家属(孩子)列表为 write-only,因为我不需要这个 属性 每次都读取。

我也删除了这个多余的 idHolder 属性。

Member.class

@Entity
@Getter @Setter @NoArgsConstructor
@Table(name = "member")
public class Member extends Person {

    @NotNull
    @Column(name = "member_type")
    private Integer memberType;

    @ManyToOne
    @JoinColumn(name = "id_holder", referencedColumnName = "id")
    private Member holder;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    @OneToMany(mappedBy = "holder")
    private List<Member> dependents;
}

现在我知道我也可以使用 JsonManagedReference/JsonBackReference 管理这个循环引用,这取决于我想处理关系的实体以及我想将它留给另一个的实体。还有其他方法我还需要吸收。