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<Employee> employeeList;
}

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

  @ManyToOne
  private Store store;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2017年8月21日 我原本只想简单记录一下springboot中应用Jpa的简单操作。不想由于hibernate...
    行者N阅读 6,570评论 0 23
  • lombok 注解: @Data :注解在类上;提供类所有属性的 getting 和 setting 方...
    一纸砚白阅读 781评论 0 0
  • 新导入工程接口报错问题 需要把upm文件在业务组件目录下拷贝一份在外层meta-inf,编译也会自动在models...
    feiyingmm阅读 170评论 0 0
  • 上面的文字是不是很动人?很多年轻女生就喜欢这样的文字。 我很喜欢的一个青年作家刘瑜曾经这样写到: 对我来说,女性这...
    海升125阅读 633评论 0 1