1、Entity
1.1 Entity类
实体类必须要有无参构造函数,并且是public或者protected。
不能是final类。
实体作为detached object 传递值时,需要实现Serializable接口
支持继承,多态关联,及查询
抽象和具体类可以是实体。实体类可以继承非实体类和实体类,非实体类可以继承实体类
1.2 主键和实体标识
每个实体需要有一个主键。
主键对应一个或者多个属性或者字段,分为简单主键和复合主键。简单主键使用@Id,复合主键使用@EmbeddedId或者@IdClass。
主键或者复合主键的字段必做是基础类型,基础类型包装类java.lang.String, java.util.Date,java.sql.Date,java.math.BigDecimal,java.math.BigInteger
复合类型主键约束规则
- 主键必须是public,有无参构造函数
- 主键的访问类型由实体的访问类型决定。除非主键是嵌入id并且指定了不同的访问类型。
- 基于属性访问时,属性必须是public或者protected
- 主键必须是可序列化的
- 主键类定义equals和hashCode方法。
- 复合主键要么表示和映射为一个嵌入类,或者表示为一个id类,映射到多个字段或者属性
- 复合主键表示为一个id类时,主键类的主要字段或者属性的名称必须与id类映射的实体类相对对应,它们的类型也必须相同。
- 主键对应继承标识符时,遵循以下规则
依赖类使用id类来表示主键时,规则如下
id类的属性名称与依赖实体的id属性遵循以下规则
(1)依赖实体的id属性和id类对应属性的名称相同
(2) 实体的id属性是基础类型,id类的对应属性也有相同的类型
(3)实体的id属性与父实体是多对一或者一对一关系,id类的属性与id类或者父实体的嵌入id有相同的类型。
依赖实体有单一主键属性时,依赖实体类指定的id类必须与父类实体的主键类型相同
依赖实体使用嵌入id表示主键时,嵌入id的属性必须与父类实体主键有相同类型,必须用@MapsId注解指明关联属性
1.2.1 继承Id映射
在默认映射不适用时或者默认映射会覆盖时,使用JoinColumn或者JoinColumns注解来表示关系属性
2、操作
相关接口
2.1 实体生命周期
new, managed, detached, removed
2.2 持久上下文生命周期和同步类型
持久上下文生命周期类型有TRANSATION,EXTENDED
2.3 监听器和回调方法
用EntityListeners注解来定义监听器,监听器顺序由注解指明的顺序决定
实体监听器类必做有无参构造函数
回调方法通过注解来指定。方法签名形式为
void <METHOD>(),在实例类中定义的
void <METHOD>(Object) 在监听器类中定义
回调方法可以是public, private,protected,包级级的,但是不能是static或者final
支持的注解类型为
PrePersist |
PostPersist |
PreRemove |
PostRemove |
PreUpdate |
PostUpdate |
PostLoad |