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 创建实体类映射表+物理外键

……

posted on 2021-03-11 22:47  dreamstar  阅读(679)  评论(0编辑  收藏  举报