【问题标题】:I need help to implement a specific hibernate Inheritance mapping我需要帮助来实现特定的休眠继承映射
【发布时间】:2021-11-05 19:13:31
【问题描述】:

我有两个类,父类和子类,在子类中我与自身有关系。数据库以两个单独的表为模型,父子表共享相同的“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;
}

成员.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;
}

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

会员模型

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

【问题讨论】:

    标签: java spring typescript hibernate mapping


    【解决方案1】:

    回答我自己的问题:

    正如我所说,我还在学习 Spring Boot 和 Hibernate,我发现我的问题是一个经典的循环引用。我打破了循环引用,将我的依赖项(子项)列表设置为只写,因为我不需要每次都读取此属性。

    我还删除了这个 idHolder 冗余属性。

    成员.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 来管理这个循环引用,这取决于我想要处理关系的实体以及我想将它留给另一个实体。以及我仍然需要同化的其他方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多