JPA一对多关系

在一对多的关系中,一是关系维护端(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 employeeList;
}

public class Employee  {
  @Id
  private String id;
  private String name;

  @ManyToOne
  private Store store;
}

你可能感兴趣的:(JPA一对多关系)