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 创建实体类映射表+物理外键
……
浙公网安备 33010602011771号