@
Entity
标注
用于实体类声明语句之前,
指出该
Java
类
为实体类
,
将映射到指定的数据库表
。
如声
明一个实体
类
Customer
,它将映射到数据库中
的
customer
表
上
。
@Table
•
当实体类与其映射的数据库表名不同名时
需要
使用
@Table
标注
说明,该标注
与
@Entity
标注
并列使用
,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
•
@
Table
标注
的常用选项
是
name
,用于指明数据库的表
名
•@Table标注还有一个两个选项catalog和schema用于设置表所属的数据库目录或模式,通常为数据库名。uniqueConstraints选项用于设置约束条件,通常不须设置。
@Id
•@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
•@Id标注也可置于属性的getter方法之前。
@GeneratedValue
•
@
GeneratedValue
用于标注主
键
的
生成
策略
,
通过
strategy
属性
指定
。
默认情况下,
JPA
自动
选择一个
最适合
底层数据库的主键生成
策略
:
SqlServer
对应
identity
,
MySQL
对应
autoincrement
。
•
在
javax.persistence.GenerationType
中
定义了以下几种可供选择的策略
:
–
IDENTITY
:采用
数据库
ID
自增长的方式来自增主键字段,
Oracle
不
支持这种方式
;
–
AUTO
:
JPA
自动选择合适的策略,是默认选项
;
–
SEQUENCE
:通过序列产生主键,
通过
@
SequenceGenerator
注解
指定序列
名,
MySql
不
支持
这种方式
–
TABLE
:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于
数据库
移植
。
@Basic
•
@Basic
表示
一个简单的属性到数据库表的字段的映射
,
对于
没有任何标注
的
getXxxx
()
方法
,
默认即为
@
Basic
•
fetch
:
表示该属性的读取策略
,
有
EAGER
和
LAZY
两种
,
分别表示主支抓取和延迟加载
,
默认
为
EAGER.
•
optional
:
表示该属性是否允许为
null
,
默认
为
true
@Column
•
当实体的属性与其映射的数据库表的列不同名时需要使用
@
Column
标注
说明
,该属性通常置于实体的属性声明语句之前,还可
与
@Id
标注
一起使用。
•
@
Column
标注
的
常用
属性
是
name
,用于设置映射数据库表的列名。此外,该标注还包含其它多个
属性
,
如
:
unique
、
nullable
、
l
ength
等。
•
@Column
标注
的
columnDefinition
属性
:
表示
该字段在数据库中的实际类型
.
通常
ORM
框架
可以根据属性类型自动判断数据库中字段的类型
,
但是对于
Date
类型仍无法确定数据库中字段类型究竟是
DATE,TIME
还是
TIMESTAMP.
此外
,String
的默认映射类型为
VARCHAR
,
如果
要
将
String
类型
映射到特定数据库
的
BLOB
或
TEXT
字段类型
.
•
@
Column
标注也可置于属性的
getter
方法之前
@Transient
•
表示该属性并非一个到数据库表的字段的映射
,ORM
框架将忽略该属性
.
•
如果
一个属性并非数据库表的字段映射
,
就务必将其标示为
@Transient,
否则
,ORM
框架默认其注解为
@Basic
@Temporal
•
在核心
的
JavaAPI
中
并没有
定义
Date
类型的精度
(temporalprecision).
而在
数据库中
,
表示
Date
类型
的数据
有
DATE
,TIME,
和
TIMESTAMP
三
种精度
(
即单纯的日期
,
时间
,
或者两者兼备
).
在进行属性映射时可
使用
@Temporal
注解来调整精度
.