在一对多的关系中,一是关系维护端(inverse side),多是关系被维护端(owner side)。
fetch (fetch = FetchType.LAZY)
属性是该实体的加载方式,FetchType是枚举类型,值有两种:LAZY和EAGER。
- 一的一方,FetchType默认是LAZY,表示关联数据不同时加载。
- 多的一方,FetchType默认是EAGER,表示关联数据同时加载。
mappedBy (mappedBy = "properties")
属性用于双向关联实体时使用,用在关系的维护端指定关系的被维护端。
用在多的一方:@OneToMany(mappedBy = "properties")
orphanRemoval(boolean orphanRemoval() default false;)
属性作用是删除孤立记录,即外键为空的类型,默认为false。该属性为true时会根据外键执行级联删除,因为当你删除productType的记录时,会使product表的记录外键被删除变为孤立记录,该属性进而将孤立记录删除掉。但jpa实际执行的语句是先删除product表中的记录,后删除productType表中的记录。
cascade(CascadeType[] cascade() default {};)
级联属性,默认为空。该属性其实是一个值为枚举类型CascadeType的数组,在jpa的CascadeType枚举类型里面。
- PERSIST(级联保存操作)
- MERGE(合并(merge=save+update)
- REMOVE(级联删除操作)
- REFRESH(级联刷新操作)
- DETACH(级联分离操作)(jpa2.0新加入的变量)
- ALL(所有级联操作)
配置示例
以下配置会在Employee
表中生成外键 store_id
。
public class Store {
@Id
private String id;
private String name;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "store")
List<Employee> employeeList;
}
public class Employee {
@Id
private String id;
private String name;
@ManyToOne
private Store store;
}