休眠-OneToOne,OneToMany,ManyToOne和ManyToMany

当我们使用Hibernate时,通过JPA批注,我们能够像对待对象一样管理两个表之间的关系。 这使得使用应用程序对象模型映射数据库属性更加容易。 根据业务逻辑和建模方式,我们可以创建单向或双向关系。

@OneToOne (bidirectional)

下图显示了我们的数据库模型。 student_id是指向学生的外键(从现在开始为FK)。

drawing

首先,我们应该问自己是关系的所有者。 这将告诉我们FK应该在哪里。 一个学生与一个学费相关联,而该学费与一个独特的学生相关联。

一个好的做法是在父实体中使用级联,以便我们可以传播更改并将其应用到子级。 在我们的示例中,如果学生不存在,存在学费就没有意义,因此,学生将扮演家长角色。

如果我们看一下以前的图像,我决定补习FK。 我们可以认为,作为关系的所有者,该FK的所有者(所有者)和学生的学费,该关系的非所有者(非所有者)是学费。 但是,如果学生想拥有学费属性,如何创建双向关系? 我们可以考虑在学生方面再增加一个FK,但这会在我们的数据库模型中造成不必要的重复。 为了正确地映射两个实体,我们可以使用注释@JoinColumn和maptedBy。

@Entity
@Table(name = "student")
public class Student {
      

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToOne(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true, fetch=FetchType.LAZY)
    private Tuition tuition;

    /* Getters and setters */   
}
@Entity
@Table(name = "tuition")
public class Tuition {
      

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Double fee;

    //what column in Tuition table has the FK
    @JoinColumn(name = "student_id")
    @OneToOne(fetch = FetchType.LAZY)
    private Student student;

    /* Getters and setters */    
}

@JoinColumn显示我们要在学费表中指向的列名。 使用MappedBy,我们可以创建双向关系,即使我们只有一个FK,也可以链接两个表。 最后,这些注释的主要目标是确保映射关系的键在哪里。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值