JPA创建实体类映射表+ 创建逻辑外键
外键
参考 数据库外键ForeignKey,看一下外键的作用,要不是使用物理外键等
- 外键是什么
- 外键的作用
- 建外键几个原则
- 外键的优点--保证数据的完整性一致性
- 外键的缺点--对海量数据,性能低
- 要不要使用物理外键
- 逻辑外键
如果有两张表tb_class 和 tb_student,是一对多的关系,使用物理外键和不使用物理外键的方式分别如下
JPA 创建实体类映射表+逻辑外键
不在物理层面使用级联和外键,一切外键概念都在应用层解决。也就是说一对多,一对一,多对多的关联关系完全交给应用负责维护。
- 插入的时候,先插入父表再插入子表
- 删除的时候,先删除子表再删除父表
tb_class表
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table(name = "tb_class") public class Class { @Id private String classId; @Column private String classNo; }
tb_student表
import java.math.BigDecimal; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table(name = "tb_student", indexes = { @Index(name = "index_tb_student", columnList = "classNo,studentName"), @Index(name = "index_student_studentName", columnList = "studentName"), @Index(name = "index_student_studentAge", columnList = "studentAge") }) public class Student { @Id private String studentId; @Column private String studentName; @Column private Integer studentAge; @Column private String classNo; @Column(precision = 18, scale = 4) private BigDecimal height; @Column private Date lastModiftyDate; @Column private String classId; //手动维护tb_class表和tb_student之间的关系 }
JPA 创建实体类映射表+物理外键
……