Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
来源:互联网 发布:苹果手机怎么查mac地址 编辑:程序博客网 时间:2024/06/05 21:16
问题描述
在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处。
解决办法
概念理解
举例:在公司的权限管理中,存在公司表、部门表、员工表。
- 公司表和部门表的关系:
主控方:部门表
被控方:公司表 - 部门表和员工表的关系:
由于是多对多的关系,不存在谁是主控方或被控方,两者处于平行关系。
- 公司表和部门表的关系:
一对多或多对一,用外键关联,若未设置级联删除,则删除被控方记录的时候会有外键约束。
- 多对多,用中间表关联,删除中间表的记录,不会各方的表造成影响。
- 在该四个注解中,都含有属性可设置,以下举例两个属性。
- fetch=FetchType.LAZY为默认的数据延迟加载,fetch=FetchType.EAGER为急加载。
- cascade={CascadeType.PERSIST,CascadeType.MERGE,
CascadeType.REFRESH,CascadeType.REMOVE}.
其中:
CascadeType.PERSIST级联新增(又称级联保存);
CascadeType.MERGE:级联合并(级联更新);
CascadeType.REMOVE:级联删除;
CascadeType.REFRESH:级联刷新
CascadeType.ALL:以上四种都是;
一般采用CascadeType.MERGE:级联合并(级联更新)即可。默认值是均不进行关联。
@OneToOne
- 在一对一的关系中,只需在主控方(数据总表)内注明@OneToOne,而被控方(员工表)只是作为外键,不需任何特殊标记。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
@OneToMany和@ManyToOne
- 公司(组织)表相对于部门表是被控方,只需在被控方写mappedBy,其值为主控方中引用的外键对象的名称。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 部门表相对于公司(组织)表是主控方,在主控方只需写@ManyToOne即可,其对象名为被控表中mappedBy中的值。
- 同时需要注意,如果需要将公司表对象或者部门表对象转为JSON数据的时候,为了防止出现无限循环包含对方,需要在部门表(多的一方)的引用公司表(少的一方)对象的set方法上写上注解@JsonBackReference
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
@ManyToMany
- 在多对多的情况下,如部门表和员工表之间的关系(暂不去深究一个员工是否能有多个部门的身份)。
- 部门表和员工表只需在引用对象集合上注明@ManyToMany即可,其中部门表的写法如上段代码,员工表的写法如下段代码。
- 在多对多的映射中会生成一张中间表,其表名和字段名均有默认的命名规则,若需指定表名和字段名,只需在两者的一方或双方写上@JoinTable注解即可,详情如下代码段,表名属性name=”table_name”,与joinColumns属性是同级属性,即写在其前即可。
- 同时需要注意,如果需要将员工表对象或者部门表对象转为JSON数据的时候,为了防止出现无限循环包含对方,需要在一方的引用对方对象的set方法(Set对象的set方法)上写上注解@JsonBackReference
阅读全文
0 0
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- JPA OneToOne,OneToMany和ManyToMany的mappedBy属性
- JPA OneToOne,OneToMany和ManyToMany的mappedBy属性
- Hibernate Annotation注解方式完成表映射OneToOne, OneToMany, ManyToMany
- spring-boot-data-jpa 连接数据库
- Spring Data JPA OneToMany中的级联保存
- spring-boot-data-jpa
- JPA @OneToOne 映射
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA OneToOne双向关系
- JPA ManyToMany双向关系
- Spring Boot-使用Spring Data JPA简化数据库访问
- Spring boot结合Spring-Data-JPA操作MySQL数据库
- 基于Spring boot的Spring data jpa连接MySQL数据库
- iOS UITextField实时监测编辑的文字
- 人工智能各种技术与算法
- Java 生成随机字符串的方法之一(字母数组混合)
- 大型网站系统架构的演化
- DialogFragment
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- 数据结构图小结
- 对象流读取发生java.io.EOFException错误
- TX2刷机jetpack3.1工具包安装,不识别IP
- 每日一练20171031
- 用不到200行的Python代码实现一个区块链
- 2.1 求二进制数中1的个数
- 标准模式与混杂模式
- Your MATLAB license will expire in 05 days