jpa

注:此为个人学习笔记,内容可能有些混乱,仅供参考。

 

1、关系

关系可以是双向或单向的。双向关系同时具有持有端( owning side )和反向端( inverse   side )。单向关系只有一个持有端。

2、关系持有者

MappedBy 元素指出实体中作为关系的主控端的属性/字段。 在非持有端注明 ,类似于表明交出控制权。

一对多 / 多对一双向关系中的 “多”端必须是持有端 ,(在一对多时,外键建在多的一端)因此不能在 ManyToOne 注解中使用 mappedBy 元素。

对于一对一双向关系,包含对应的外键( foreign key )的那一端是持有端。

对于多对多双向关系,任一端都可以作为持有端。

3、级联

关系模型注解限制对 cascade=REMOVE 的使用。 cascade=REMOVE 只应该用 OneToOne OneToMany 关系上,对其它类型的关系应用 cascade=REMOVE 是不可移植的。

4、实体实例的生命周期

一个实体实例的状态可以被分为 new, managed, detached removed

  一个新创建的实体实例没有持久化标识,并且还没有与一个持久化上下文相关联。

  一个受管的实体实例有一个正与持久化上下文相关联的持久化标识。

  一个脱管的实体实例有持久化标识,但这个标识没有(或已经不再)与一个持久化上下文相关联。

  被删除的实体实例具有持久化标识,并且与持久化上下文相关联,但是已经被计划从数据库中删除。

5、持久化Entity实例

persist   保存

remove    删除

merge     将脱管实体的状态传递到由EntityManager管理的持久实体。

contains  确认一个实体的实例是不是当前持久化上下文中的受管对象。

6、级联加载

同cascade注解一样,fetch只应该用在OneToOne、OneToMany关系上,默认为lazy。

7、事件监听

在实体类上加监听方法,有以下各种注解申明方法执行的时间

@PrePersist      @PostPersist

@PreRemove       @PostRemove

@PreUpdate       @PostUpdate

8、一些注解

@OrderBy    用于指定一个集合值的关联在被获取时,其中元素的排序。

@Temporal   在java.util.Date和java.util.Calendar类型的持久字段/属性上必须指定Temporal注解,它也只能用于这些类型。

9、注意

所有未用 Transient 标注的属性都是持久化的。属性访问方法必须是 public

protected 。当使用基于属性的访问时,实体的对象 / 关系映射注解标注在 getter 方法上。

 

你可能感兴趣的:(java jpa)