JPA记录
- JPA规范
- ORM映射
@Entity:映射Class类实体
@Table:映射表
@MappedSuperClass:映射父类,不产生数据库表
@Access:标识访问策略
@Id:实体ID标识
@GeneratedValue:实体ID生成方式
@Column:数据库表列映射
@Lob:clob或blob映射
@Enumerated:枚举映射
@Temporal:日期或时间类型映射
@ElementCollection:基本类型或Class类映射
@MapKey:Map的key映射方式
@Transient:不映射
- 关联关系
@OneToOne:一对一关系,使用数据库表的一个字段映射;不产生中间表。
@OneToMany:一对多关系,可以使用数据库的一个字段映射,也可以使用中间表;默认使用数据库表字段映射。
@ManyToMany:多对多关系,使用中间表映射。
@JoinTable:数据库表关系的关联表,对开发者透明。
@JoinColumn:数据库表关系的关联列,对开发者透明
- 实体生命周期
瞬时:创建实体对象。
托管:瞬时状态实体调用persist方法,进行脱管;持久化实体调用find方法,进行托管。
持久化:调用find方法转为托管状态。
脱管:脱管状态事务结束,自动转为脱管状态;调用refresh或merge方法转为托管状态。
移除:在脱管状态中移出实体后,转为移除状态。
- 在Spring和Hibernate支持的基础上,进行JPA开发
Spring自动为实现Repository接口提供动态代理。动态代理的方法分为两种,一种为基类接口方法和自定义方法。基类接口方法代理默认调用SimpleJPARepository对象的方法;自定义的方法通过方法命名规则或注解进行代理。
Spring中DAO层代理通过配置的factory-class生成DAO层接口的代理。如果不需要生成Repository子接口的代理,需要使用@NoRepositoryBean对接口进行注解。否则会默认查找后缀为Impl接口子类,并将其作为实现类。
- 以下是在Spring的dao接口中扩展update方法