一、简介
首先来说关联关系是面向对象分析,面向对象设计最重要的部分,JPA是完全可以通过映射来简化数据持久化到数据,和Hibernate一样,JPA的关联关系也分为两种,一种是单向关联,一种是双向关联:
单向关联:只需要单向访问关联端,比如说:我们只能通过某一学期访问这学期的课程,而不能通过课程访问课程所属的学期,这种关联关系就是单向关联。
双向关联:关联的两端可以互相访问。比说说班级可以访问学生,学生也可以访问班级,这种关联关系就是双向关联。
关联关系可以分为如下几种:
单向:1-1;1-N;N-1;N-N
双向:1-1;1-N;N-N;双向关联里没有N-1,因为双向关系中1-N和N-1是完全相同的。
二、关联属性
不管是单向关联还是双向关联都需要在N的一端实体中使用@ManyToOne的注解修饰记录关联关系的属性,使用ManyToOne注解常用到的属性有:
1、Cascade:指定关联实体采用怎样的级联策略,常用的属性有四种:
(1)CascadeType.ALL:将所有的持久化操作都级联到关联实体
(2)CascadeType.MERGE:将merge操作都级联到关联实体
(3)CascadeType.PERSIST:将persist操作都级联到关联实体
(4)CascadeType.REFRESH:将refresh操作都级联到关联实体
(5)CascadeType.REMOVE:将remove操作都级联到关联实体
2、fetch:指定抓取关联实体时的抓取策略,常用的属性有如下两种:
(1)FetchType.EAGER:抓取实体时,立即抓取关联实体
(2)FetchType.LAZY:抓取实体时,演示抓取关联实体,等到真正调用关联实体时再去抓取
3、TargetEntity:指定关联实体的类名,对于大多数的关联关系,JPA是可以通过反射来确定关联实体的类型的,因此这个属性不是必要的,但是也存在一些特殊情况,例如一对多,多对多,如果实体中不带泛型信息的Set集合来记录关联实体,那么必须指定targetEntity属性
三、映射数据库属性
映射实体的时候,存在N的一端,当将实体的属性持久化到数据库的时候,需要指定该属性在数据库中的各种属性,此时用到的注解就是@JoinColumn,其中常用的属性有:
1、name:指定该属性在外键列的列名
2、nullable:指定该列是否允许为空,默认是可以为空的
3、table:指定该列所在的数据表的表名,默认在多的一端实体所映射成的数据库表中
4、unique:指定该列是否为唯一约束。
刚刚接触了解的不多,关于JPA的关联映射和这次博客中写到的属性在下篇关于单双向关联映射的实例中在做详细的实例。