我需要帮助来实现特定的休眠继承映射
Posted
技术标签:
【中文标题】我需要帮助来实现特定的休眠继承映射【英文标题】: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 )
【问题讨论】:
【参考方案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 来管理这个循环引用,这取决于我想要处理关系的实体以及我想将它留给另一个实体。以及我仍然需要同化的其他方式。
【讨论】:
以上是关于我需要帮助来实现特定的休眠继承映射的主要内容,如果未能解决你的问题,请参考以下文章