持久化实体
JPA其实是JavaEE平台的持久化层解决方案,它使用一种对象-关系映射的技术自动持久化Java对象,包括实体,实体管理器和Java持久化查询语言三部分。
@Entity:该注解用来指明其所在的类是实体类型。
@Table:该注解用来设置实体所要映射的表名。
@Id:该注解用来将某个属性设置为该实体的主键或者说唯一标示符。
@GeneratedValue:该注解用来指定主键值的生成方式,该注解与@Id注解结合使用在主键属性上。
public @interface GeneratedValue { GenerationType strategy() default AUTO; String generator() default ""; }
generator()属性定义主键值生成器的名称。如果实体的主键值生成策略不是GenerationType.AUTO或者GenerationType.IDENTITY,就需要提供相应的SequenceGenerator或者TableGenerator注解,然后将generator()属性值设置为注解的name属性值。
strategy()属性指定字段值生成策略,它的属性值是个枚举类型,有四个可选值:TABLE,SEQUENCE,IDENTITY,AUTO。
(1)GenerationType.TABLE:使用该值会创建一个表生成数据型序列号,并用序列号作为主键值。使用该策略更易于数据库移植。
(2)GenerationType.SEQUENCE:使用数据库的SEQUENCE(序列)来生成主键值。
(3)GenerationType.IDENTITY:使用数据库ID自增长方式来生成主键值。
(4)GenerationType.AUTO:由容器根据数据库类型选择一种合适的生成方式。
@Column:该注解指定实体的成员属性映射到数据表中的哪一个字段和该字段的一些结构信息,该注解需标注在成员属性的getter方式上。
成员属性映射
@Transient:默认情况下,实体成员属性所映射的全部字段都会成为持久化字段。如果不需要一些成员属性成为持久化字段,可以使用该注解。
@Enumerated:如果需要将枚举类型成员属性映射到数据库,可以使用该注解。
@Lob:该注解专门用于映射大数据类型,当实体成员属性的类型为byte[],Byte[]或java.io.Serializable时,该注解将映射为数据库的Blob类型,当实体成员属性的类型为char[],Character[]或java.lang.String时,该注解将映射为数据库的Clob类型。
@Basic:对于使用了@Lob注解的大数据类型,为了避免每次加载实体时都占用大量内存,我们有必要对该属性进行延时加载,这时可以用到该注解。(FetchType()属性指定是否延时加载,默认为立即加载。optional()属性指定在生成数据库结构时字段是否允许为null。)
@Temporal:该注解来指明映射到数据库data,time和timestamp中的哪种类型。
建议重载equals和hashcode方法