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<>();
}