1、OneToOne
(1)单向OneToOne
关系拥有端:
关系接收端:
测试效果:
生成表的SQL语句如下:
(2)双向OneToOne
将关系接收端改为:
optional=false时易发生错误:
org.hibernate.PropertyValueException: not-null property references anull or transient value: com.sunyard.entities.Person.name
异常环境:数据插入
异常原因:JPA的Entity中一个属性定义为nullable=false(optional=false即必须有),插入数据该字段为null。
解决方法:将optional=false改为optional=true即可
2、OneToMany
(1)单向OneToMany
关系发出端:
关系接收端:
生成userlogin表的SQL语句如下:
(2)双向OneToMany
测试效果:
3、ManyToOne
测试结果:
4、ManyToMany
(1)单向ManyToMany
测试结果:会生出一张中间表保存USER与ROLE的对应关系
(2)双向ManyToMany
测试结果:
生成中间表的SQL语句:
补充点:
a.关于级联:
public class Order {
.......
@OneToMany(cascade = {CascadeType.PERSIST})//级联操作
@JoinColumn(name = "Order_Id")
private List<OrderItem> items;
...........
}
当对OrderItem中的order字段进行PERSIST操作时也会级联对集合中的items做同样的操作
b.inverseJoinColumns理解