JavaBean风格
·属性为私有,有get和set方法
映射实体:@Entity
无参的构造方法:标注@Entity的实体类至少要有一个无参的构造方法
实现Serializable接口,建议每个Entity都实现该接口
可继承性:
·实体可继承,非实体类可以继承自实体类,实体类也可以继承自非实体类
·抽象类(abstract)也可以标注为实体类
映射主键@Id
映射表和字段:@Table、@Column
java数据类型与数据库中的类型转换时JPA实现框架自动转换的,所以不同的JPA实现框架转换的规则也不太一样
映射优化一:基本数据类型 VS 封装类
·例:比如字段id,它的值不能为null,所以映射成int型和Interger型都可以
·例:比如字段age,值可能是null,映射成int时,会发生异常
注:建议都使用包装类,虽然会牺牲一些转化的效率,但可以避免持久化数据时的一些异常。
映射优化二:@Basic设置加载方式
·可以设置一个枚举类型,例:public enum FetchType(LAZY,EAGER);有时创建实体时如果也加载的话,可能会造成资源严重占用,这时候就需要设置实体属性的加载方式为惰性加载(LAZY).
·optional表示属性是否可为null,不能用于java基本数据类型byte,int,short,long,Boolean,char,float,double
主键映射:
主键标识:@Id
@GeneratedValue用于主键的生成策略
自增主键:@GeneratedValue(strategy = GenerationType.AUTO)
@GeneratedValue(strategy = GenerationType.SEQUENCE -Oracle
@GeneratedValue(strategy = GenerationType.IDENTITY -SQL server
表生成器:@TableGenerator
复合主键:@IdClass
嵌入式主键:@Embeddedld
JPA可定义的生成主键策略比较:
·SEQUENCE,IDENTITY主要针对一些特殊的数据库,未确定系统要支持的数据库类型时,最好不要使用。
·AUTO用于比较简单的主键,对主键生成策略要求少
·TABLE生成策略是将主键的值持久化在数据库的表中,因为只要是关系型数据库,都可以创建一个表,专门来保存生成的值,这样就消除了数据库之间的不兼容性,既能保证支持多种数据库,又有一定的灵活性,建议使用。
·如果以上方法不能满足需求时,可以通过一定的规则来设置主键的值,可以使用UUID,使其在程序中自动生成,然后映射到实体的主键上,不能通过JPA的主键生成策略来实现。
映射特殊类型
映射Blob和Clob类型(@Lob),注意项:
·@Lob适用于标注字段类型为Clob和Blob类型
·Clob类型是长字符串类型,映射可为char[]、Character[]或者String类型
·Blob类型是字节类型,映射可为byte[]、Byte[]或者实现了Serializable接口的类
·因为这两种类型的数据一般占用的内存空间比较大,所以都要与@Basic标记同时使用,设置加载方式为FetchType.LAZY
映射非持久化类型:@Transient