引:其实距离自己上次写数据库操作已经1个多月了,之前接触的就是Hibernate,这次接触jpa,就把几种对应关系理清。
映射策略
注:这次举的例子都是User和Car的
外键关联
简介:两个表的关系定义在其中一个表中
@OneToOne
方法一:1
2
3 (cascade=CascadeType.ALL, fetch=FetchType.EAGER)
"user_id") (name =
private Car car;
通过在Car表中加入一个外键,实现两者关系。
方法二:1
2"Car") (cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy =
private User user;
通过在Car类中用MappedBy声明让User进行维护。
@OneToMany
1 | (cascade=CascadeType.ALL, fetch=FetchType.EAGER) |
通过在Car表中加入一个外键,实现一对多关系。
@ManyToMany
1 | (cascade=CascadeType.ALL, fetch=FetchType.EAGER) |
这个是采用默认的表关联
表关联
简介:两个表的关系通过一张中间表来来关联
@OneToMany
1 | (cascade=CascadeType.ALL, fetch=FetchType.EAGER) |
通过JoinTable来确定一张中间表,joinColumns里面放父表的属性,inverseJoinColumns放子表的属性
@ManyToMany
1 | (cascade=CascadeType.ALL, fetch=FetchType.EAGER) |
解释如@OneToMany
一些属性
cascade属性
- CascadeType.PERSIST:级联新建
- CascadeType.REMOVE:级联删除
- CascadeType.REFRESH:级联刷新
- CascadeType.MERGE:级联更新
- CascadeType.ALL:包括上面四项
fetch属性
- FetchType.EAGER:相当于禁用懒加载,推荐开发使用
- FetchType.LAZY:懒加载,默认值,推荐部署使用
总结
父表是提供主键的,子表是利用父表的主键来设置外键的,维护方是Owner,被维护方是Owned。提示自己一个傻逼的问题,插入数据要先往两张表中插入数据,在往中间表插入数据,不然会报错~