SpringBoot JPA的多表查询
1.关系映射
单项多对一关联
我们以User和Role表为例
修改User实体类,添加Role对象
@ManyToOne注解映射多对一关联,targetEntity属性表示关联实体类型,可以省略
@JoinColumn注解映射的外键字段,如果不指定,则生成一张新表维护两个对象之间的关系
2.创建UserRepository接口
3.编写测试类即可
4.双向一对多关联
●targetEntity属性表示关联的实体类型
●feteh 属性表示加载策略,FetchType 取值有LAZY及EAGER, LAZY 表示延迟加载,
EAGER表示立即加载。@ManyToOne注解也包含该属性,且默认值为EAGER,表示
立即加载,所以查询User时通过左外关联立即获取Role数据: @One ToMany注解
该属性默认值为LAZY。
●cascade属性表示级联操作,CascadeType取值有PERSIST、 REMOVE、 …等.
PERSIST表示级联持久化(保存)操作,REMOVE级联删除,ALL 级联所有操作。
@ManyToOne注解也包含该属性,但一般不在多的一方进行级联操作。
●mappedBy 属性用来设置对象之间的关系维护方(关系维护通过操作外键完成)。如
不指定mappedBy属性,则对象均由自己维护关系(外键),操作-方对象时,会额
外产生更新外键的sQL语句。所以一般在@One ToMay注解中指定mappedBy属性,
且属性值为多方对象中关联的一方属性名, 并且此时一-方 实体中不能添加
JoinColumn注解。
这个地方要使用立即加载否则可能会报错
4.级联新增
记得将
cascade = CascadeType.PERSIST
记得将实体类手动生成set/get
不要使用Data注解可能发生循环报错