JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。其中注解方式简单快捷高效,在开发中强烈推荐,文中主要总结了一些常用而重要的注解。
JPA通常的注解方式方式包括:基于属性(property-based)和基于字段(field-based) Note:同一个实体类中必须并且只能使用其中一种注解方式
基于字段的注解, 就是直接将注解放置在实体类的字段的前面
基于属性的注解, 就是直接将注解放置在实体类相应的getter方法前面(这一点和Spring正好相反)
(1) @Entity
用于实体类声明语句前,标识该POJO是一个jpa实体类,将映射到指定的数据库表。如声明一个实体类User,则映射到数据库中的user表上。
(2) @Table(name = “user”)
用于设置表名,当实体类与其映射的数据库表名不同名时,需要使用该标注,通常与@Entity标注并列使用,不加name,则表示默认为实体类名。
(3) @Id
用于设置主键,当实体类与其映射的数据库表名不同名时,需要使用该标注,通常与@Entity标注并列使用,不加name,则表示默认为实体类名。
(4) @GeneratedValue(strategy=GenerationType.IDENTITY) 用于标注主键的生成策略,默认情况,jpa自动选择一个最适合底层数据库的主键生成策略。sqlServer 对应identity,MySql对应 auto increment
(5) @Basic(fetch=FetchType.LAZY,optional=true)
用于简单属性到数据库表字段的映射,对于没有任何标注的get方法,默认为@Basic。
fetch: 抓取策略,延时加载LAZY与立即加载EAGER,默认为EAGER。
optional: 指定在生成数据库结构时字段是否允许为 null,默认为true。
(6) @Column(length=15,nullable=false,columnDefinition="",insertable=true,scale=10,table="")
用于注释指定字段的详细定义,最常用的属性是name,指定数据表列名;columnDefinition指定该字段在数据库中的实际类型,特别对于DATE类型。
工具方法,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,必须标注,否则ORM框架默认为@Basic
用于注释DATE属性的精度,有TemporalType.DATE,TemporalType.TIME,TemporalType.TIMESTAMP时间类型格式。