2021-02-28


JPA实体映射关系


实体类标识
• @Entity:实体类的标识
• @Table:映射的表名
• @Id:数据ID的标识
• @Column:字段名的映射

级联(Cascade):对一个实体进行增删改操作时是否将它关联的其他对象
也进行相应的增删改操作。
• CascadeType.ALL:增删改所有级联
• CascadeType.PERSIST:级联增加操作
• CascadeType.MERGE:级联更新操作
• CascadeType.REMOVE:级联删除操作
• CascadeType.REFRESH:级联刷新操作
• CascadeType.DETACH:级联脱管/游离操作

id自动生成策略
1,数据库自增长
@GeneratedValue(strategy = GenerationType.IDENTITY)
2,取表中最大值+1
@GenericGenerator(name = “hbincrement”, strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
3,uuid
@GenericGenerator(name=“idGenerator”, strategy=“uuid”)
@GeneratedValue(generator=“idGenerator”)

1,一对一(一个学生一张身份证明)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “student_info”)
public class StudentBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “stu_id”)
private Long id;
@Column(name=“stu_name”)
private String name;
@Column(name=“stu_gender”)
private String gender;
@Column(name=“stu_age”)
private Integer age;
@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name=“detail_id”)
private StudentDetailBean studentDetailBean ;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “student_detail”)
public class StudentDetailBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “detail_id”)
private Long id;
@Column(name = “id_card”)
private String idCard;
@Column(name = “addr”)
private String addr;
// mappedBy表示放弃维护关系。
@OneToOne(mappedBy = “studentDetailBean”)
private StudentBean studentBean;
}

2,一对多
一对多(单向)是指只有一方关联多方数据,而多方不关联一方。
一对多(双向)是指一方和多方互相关联。
下面是单向一对多(一个班级有多名学生)

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “student_info”)
public class StudentBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “stu_id”)
private Long id;
@Column(name = “stu_name”)
private String name;
@Column(name = “stu_gender”)
private String gender;
@Column(name = “stu_age”)
private Integer age;
@ManyToOne
@JoinColumn(name = “cls_id”)
private ClassBean classBean;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “class_info”)
public class ClassBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “cls_id”)
private Long id;
@Column(name = “cls_name”)
private String name;
@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
// @OneToMany(fetch = FetchType.EAGER,mappedBy = “classBean”)
@JoinColumn(name = “cls_id”,referencedColumnName = “cls_id”)
private List studentBeans = new ArrayList();
}

3,多对多(一个学生可以选择多门课程,一门课程可以多名学生同时学习)

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “student_info”)
public class StudentBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “stu_id”)
private Long id;
@Column(name = “stu_name”)
private String name;
@Column(name = “stu_gender”)
private String gender;
@Column(name = “stu_age”)
private Integer age;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = “student_course”
,joinColumns = @JoinColumn(name = “stu_id”)
,inverseJoinColumns = @JoinColumn(name = “course_id”))
private List courseBeans = new ArrayList<>();
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = “course_info”)
public class CourseBean {
@Id
@GenericGenerator(name = “hbincrement”,strategy = “increment”)
@GeneratedValue(generator = “hbincrement”)
@Column(name = “course_id”)
private Long id;
@Column(name = “course_name”)
private String name;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = “student_course”
,joinColumns = @JoinColumn(name = “course_id”)
,inverseJoinColumns = @JoinColumn(name = “stu_id”))
private List studentBeans = new ArrayList<>();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值