楼主认为,hibernate 的 jpa 是使用 Class 和 table 的映射关系,在数据库中创建 table 的一种功能。
1、一些基础的注解
@Entity
实体注解,使用这个注解并配置 hibernate 扫描包后,不需要写 xml 映射文件,一般写在 model class 上。
@Table
- name 使用哪张表(table name)
- catalog 使用哪个database
- index 指定索引
- scheme 指定scheme
- uniqueConstraints
表上的唯一约束(保证是唯一的,没有重复的)
demo:
1
2
3
4
5Entity //实体的注解
//唯一约束@Id
指定主键@GeneratedValue
- strategy 主键生成策略,有AUTO、INDENTITY、SEQUENCE 、 TABLE 4种
TABLE:使用一个特定的数据库表格来保存主键。 (适用于跨不同数据库平台,了解即可) SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 (适用于oracle数据库) IDENTITY:主键由数据库自动生成(主要是自动增长型) (适用于mysql等数据库) AUTO:主键由程序控制。
- generator
主键生成器,这个要结合 @SequenceGenerator 或 @TableGenerator使用
demo:
1
2
3
4
5
6
7
8
9
10//指定主键
//strategy主键生成策略,有
//TABLE:使用一个特定的数据库表格来保存主键。 (适用于跨不同数据库平台,了解即可)
//SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 (适用于oracle数据库)
//IDENTITY:主键由数据库自动生成(主要是自动增长型) (适用于mysql等数据库)
//AUTO:主键由程序控制。
private int id;@SequenceGenerator
- name name属性是必传参数
- allocationSize 序列号增量
- initialValue 初始值,不能小于1
- schema
- sequenceName
demo:
1
2
3
4
5
6@Column
- columnDefinition 建表时插入的sql片段
- insertable hibernate insert 语句是否包含此字段,默认为true
- length 长度
- name
- nullable 是否可以为空
- precision 位数(十进制),貌似在postgresql中不起作用
- scale 小数位数(十进制),貌似在postgresql中不起作用
- table
- unique 是否唯一
- updatable hibernate update 语句是否包含此字段,默认为true
project url:https://github.com/Knight-JNXU/JavaFundation/tree/HibernateJpa 未完待续