IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA环境搭建,JPA注解@ManyToOne使用详情;JPA外键设置
一、数据库原型
数据库模型如图所示,而现在需要根据数据库模型,建立对应的实体类,这在项目重构老数据库,采用新的框架重构上应该是比较常见的。
数据库脚本如下:
1 CREATE TABLE `bomsub` ( 2 `subId` varchar(40) NOT NULL COMMENT '子类型ID', 3 `mainId` varchar(40) NOT NULL COMMENT '主类型ID', 4 `subName` varchar(40) NOT NULL COMMENT '子类型名称', 5 `engName` varchar(255) NOT NULL, 6 `deleted` int(1) NOT NULL DEFAULT '1' COMMENT '当前是否删除', 7 PRIMARY KEY (`subId`), 8 KEY `FK_Reference_47` (`mainId`), 9 CONSTRAINT `FK_Reference_47` FOREIGN KEY (`mainId`) REFERENCES `bommain` (`mainId`) 10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Bom表的小类';
实体类构成:
1 @Entity 2 @Table(name = "bomsub") 3 public class BomSub extends SuperEntity { 4 5 6 /** 7 * 子类型ID 8 */ 9 @Id 10 @GenericGenerator(strategy = "uuid", name = "subId") 11 @GeneratedValue(generator = "subId") 12 @Column(length = 40) 13 public String subId; 14 15 /** 16 * 主类型ID 17 */ 18 @ManyToOne(cascade = {CascadeType.ALL}) 19 @JoinColumn(name = "mainId", foreignKey = @ForeignKey(name = "FK_Reference_47"), columnDefinition = "varchar(40) NOT NULL COMMENT '主类型ID'") 20 public BomMain bomMain; 21 22 /** 23 * 子类型名称 24 */ 25 @Column(nullable = false, length = 40) 26 public String subName; 27 28 /** 29 * 英文名称 30 */ 31 @Column(nullable = false) 32 public String engName; 33 34 /** 35 * 所有字段的是否存在 36 */ 37 @Column(nullable = false, columnDefinition = "int(1) default 1 COMMENT '当前是否删除'") 38 public Integer deleted; 39 40 41 }
主要部分:
/**
* 主类型ID
*/
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "mainId", foreignKey = @ForeignKey(name = "FK_Reference_47"), columnDefinition = "varchar(40) NOT NULL COMMENT '主类型ID'")
public BomMain bomMain;
@ManyToOne表明表的关系是多对一,就是子表bomsub的mainId,是一个,但是对应着多个bomMain的Id
@JoinColumn 表明两个表是如何关联的,关联需要的条件
内部属性 name : 关联两个表外键的名称
foreignKey :外键的设置,这里对其名称进行设置,就会将索引的名称设置为这里名字的设置
columnDefinition :DDL拼接,这里指的是这个属性的SQL语句的设置
当这个表生成的时候就会把剩下的部分在JPA模式下自动生成设置的SQL语句。
十年磨一剑,一剑破万法