jpa主键生成策略
jpa主键生成策略
1 @GeneratedValue
这个注解的作用就是标识实体的唯一主键,且提供主键生成策略。
有两个属性 strategy 和 generator
generator属性是一个字符串,申明了主键生成器的名称 对应于同名的@SequenceGenerator
2 @TableGenerator
strategy属性:提供四种值
1 | -AUTO 主键由程序控制, 是默认选项 ,不设置就是这个 |
3 @javax.persistence.SequenceGenerator
如果实体标识的自动生策略是 GenerationType.TABLE,开发者需要为实体标识字段提供 TableGenerator 注释,它的参数描述了使用数据库表生成实体标识的具体细节。该注释支持下列属性:
属性 | 说明 |
---|---|
name | 该属性是必须设置的属性,它表示了 TableGenerator注释在 OpenJPA 容器中的唯一名称,将会被 GeneratedValue注释的 generator属性所使用。将实体标识的自动生成委托给数据库表时,实体标识字段的 GeneratedValue注释的 generator属性的值必须和某个 TableGenerator注释的 name属性值保持一致。 |
table | 该属性设置的是生成序列号的表的名称。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认的表名 OPENJPA_SEQUENCES_TABLE。 |
schema | 该属性设置的是生成序列号的表的 schema。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会默认使用当前数据库用户对应的 schema。 |
catalog | 该属性设置的是生成序列号的表的 catalog。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认当前数据库用户对应的 catalog。 |
pkColumnName | 该属性设置的是生成序列号的表中的主键字段的名称,该字段将保存代表每个实体对应的标识值对应的特征字符串。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认值 ID。 |
valueColumnName | 该属性设置的是生成序列号的表中记录实体对应标识最大值的字段的名称。该属性并不是必须设置的属性,如果开发者没有为该 属性设置值,OpenJPA 容器将会使用默认值 SEQUENCE_VALUE。 |
pkColumnValue | 该属性设置的是生成序列号的表中的主键字段的特征字符串值 ( 比如 customID ),该字段将保存代表每个实体对应的标识值对应的特征字符串。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认值 DEFAULT。可以为多个实体设置相同的 pkColumnValue属性值,这些实体标识的生成将通过同一列的值的递增来实现。 |
initialValue | 该属性设置的是生成序列号的表实体标识的初始值。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认值 0 。 |
allocationSize | 为了降低标识生成时频繁操作数据库造成 的性能上的影响,实体标识生成的时候会一次性的获取多个实体标识,该属性设置的就是一次性获取实体标识的数目。该属性并不是必须设置的属性,如果开发者没有为该属性设置值,OpenJPA 容器将会使用默认值 50 。 |
4 @GenericGenerator
自定义主键生成策略
实现IdentifierGenerator 接口的generate方法
然后在 @GenericGenerator 中的strategy 填写类位置(com.ss.类名)
5 常用的主键生成配置
5.1 主键自增
1 |
|
5.2 uuid
1 |
5.3 雪花ID
新建自定义主键生成策略类
1 | package com.ss.demo.db_demo.dao.config; |
在实体类中指定生成策略
1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 那年夏十七!