Hibernate使用JPA主键生成策略
来源:互联网 发布:淘宝刷差评多少钱一单 编辑:程序博客网 时间:2024/05/16 05:14
主键映射
当给持久化类定义一个标识属性时(对应数据表中的主键),可以使用@Id
。
可以使用@GeneratedValue
修饰实体标识属性,也就是指定主键的生成策略。 @GeneratorValue
的主要属性:
1. strategy
: 主键生成策略,该属性有4个值,AUTO
、IDENTITY
、SEQUENCE
、TABLE
。
- AUTO
: 根据数据库的底层,自动选择IDENTITY
、SEQUENCE
、TABLE
。
- IDENTITY
: 自增长主键生成策略。IDENTITY
适用于MySQL
、Sql Server
等数据库。用此策略时,省略 generator
属性。
- SEQUENCE
: 对于Oracle
这样的数据库使用基于Sequence
的主键生成策略。需要用@SequenceGenerator
(之后写到)。
- TABLE
: 使用辅助表来生成主键。与@TableGenerator
一起使用(之后写到)。
2. generator
: 生成器的名称。当strategy
属性使用SEQUENCE
、TABLE
时,该属性使用他们定义的名字,也就是生成器的名称。
@SequenceGenerator
生成器主要属性:
- name
: 指定生成器的名字。可以在@GenratedValue
的generator
中指定。
- allocationSize
: sequenceName
的大小。
- sequenceName
: 数据库中sequence
的名称。
- initialValue
: 指定sequence
的初始值。
@TableGenerator
生成器主要属性:
- name
: 指定生成器的名称。可以在@GeneratedValue
的generator
属性指定。
- table
: 指定辅助表的名称。
- initialValue
: 指定的整数值将作为辅助表的初始值。默认为0 。
- allocationSize
: 指定辅助表每次生成主键值的个数。举个例子,假设设置该值为5,那么每次插入一个数据,辅助表中的valueColumnName
所在列的主键值加上5,也就是说映射表中的新一行主键值会比上一个大5 。
- pkColumnName
: 指定存放主键名的列名。
- valueColumnName
: 指定存放主键值的列名。
- pkColumnValue
: 指定主键名。
使用TABLE
辅助表主键生成策略的例子:
@Entity@Table(name = "person")public class Person { @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "tab") @TableGenerator(name = "tab" , table = "tab_person", allocationSize = 1, pkColumnName = "pk_col", pkColumnValue = "pk_val", valueColumnName = "val_col") private int myId; private String name; private int age; ```省略get、set方法```}
这里指定辅助表为tab_person
,主键每次增加的大小为1,存放主键名的列名为pk_col
,存放主键值的列名为val_col
,主键列的主键名为pk_val
。
测试代码:
session.beginTransaction(); Person person = new Person(); person.setName("sweat"); person.setAge(21); session.save(person); session.getTransaction().commit();
数据库数据:
mysql> select * from tab_person;+--------+---------+| pk_col | val_col |+--------+---------+| pk_val | 2 |+--------+---------+1 row in set (0.00 sec)mysql> select * from person;+------+-----+-------+| myId | age | name |+------+-----+-------+| 1 | 21 | sweat |+------+-----+-------+1 row in set (0.00 sec)
可以看到辅助表的pk_val
的数据为2,它是根据原始值1(也就是person
表中的主键myId
的值)加上allocationSize
后得到的。这里,2就是下一个插入数据的主键值。
- Hibernate使用JPA主键生成策略
- JPA使用Hibernate实现,使用UUID.主键的生成策略.
- Hibernate和JPA的主键生成策略
- hibernate JPA注解主键生成策略
- jpa和hibernate的主键生成策略
- JPA主键生成策略
- JPA 主键生成策略
- JPA主键生成策略
- JPA主键生成策略
- jpa 主键生成策略
- JPA主键生成策略
- 使用注解风格学习Hibernate和JPA的4种主键生成策略
- 使用注解风格学习Hibernate和JPA的主键生成策略
- 使用注解风格学习Hibernate和JPA的主键生成策略
- 使用注解风格学习Hibernate和JPA的主键生成策略
- 基于annotation的JPA和hibernate主键生成策略
- JPA实体注解与hibernate主键生成策略
- JPA实体注解与hibernate主键生成策略
- hdu 1226
- 【BZOJ2753】【SCOI2012】滑雪与时间胶囊(最小生成树+层次图)
- 水题-fxx and string
- 深入理解Hadoop YARN中的Container概念
- 码表
- Hibernate使用JPA主键生成策略
- 三天打渔两天晒网程序代码
- Leetcode 147 Insertion Sort List(插入排序列表)
- JDK1.8版本,java并发框架支持锁包括
- C++游戏服务器的性能优化
- iOS 为label添加中划线 下划线(商品打折)
- exit()与_exit()的区别
- Atitit 找人软福利建设 技术团队建设大概流程
- linux svn 设置propertise