2.1 注解主键生成策略(Generated identifier values)
来源:互联网 发布:软件应用的英文 编辑:程序博客网 时间:2024/06/06 14:02
@GeneratedValue,JPA通用策略生成器 。
JPA提供的四种标准用法为IDENTITY,AUTO,TABLE,SEQUENCE
1、IDENTITY——主键由数据库自动生成
@GeneratedValue(strategy = GenerationType.IDENTITY)
MySQL使用AUTO_INCREMENT、微软的SQLServer使用IDENTITY
2、AUTO——自动选择合适的生成策略
@GeneratedValue(strategy = GenerationType.AUTO)
MySQL里面生成一个特殊的表来记录id,默认的表明为hibernate_sequence。另外在数据库新建一个表放置更新的主键,每次都要update,效率较低。
下面是创建User实例后并插入100条数据后,数据库生成的两个表,分别为User和hibernate_sequence。hibernate_sequence中记录了下一个主键的值
通过DEBUG信息,可以看出生成策略大概的运行机制(创建hibernate_sequence表—>插入生成值—>取出值—>更新值)
3、TABLE——使用自定义表来记录
@GeneratedValue(strategy = GenerationType.TABLE)
默认情况下,使用hibernate_sequences来记录id的值
使用@TableGenerator可以指定表名、列名
// 自定义基于表的生成器
@TableGenerator(
name = "table-generator",//生成器名称
table = "table_identifier",//数据库表名,记录下一个id值的总表
pkColumnName = "table_name",//序列名称,哪个domain用的
valueColumnName = "product_id",//存储id的列表,实际的值
allocationSize = 100//每次更新的id值的数量
)
@GeneratedValue(
strategy = GenerationType.TABLE, //指定表生成策略
generator = "table-generator" // 指定生成器名称
)下面是创建User实例后并插入100条数据后,数据库生成的两个表,分别为user和user_identifier
DEBUG信息如下:
4、SEQUENCE——根据数据库底层序列来获取主键值,前提是数据库需要支持序列(如Oracle)
@SequenceGenerator(
name = "sequence-generator", //生成器名称
sequenceName = "product_sequence"//序列名称
)@GeneratedValue(
strategy = GenerationType.SEQUENCE,//指定序列生成策略
generator = "sequence-generator" //生成器名称
)
@GenericGenerator ,hibernate主键策略生成器
1、UUID
@Id
@GeneratedValue(generator= "uu" // 指定生成器名称
)
@GenericGenerator(// 定义生成器
name= "uu", // 生成器的名称
// 主键生成策略,Hibernate在初始化的时候,放了一个名为uuid2的生成器策略在内存里面
//strategy ="org.hibernate.id.UUIDGenerator"
strategy = "uuid2"
)通过strategy 指定不同的生成器,这些生成器必须实现IdentifierGenerator接口,常用的有:
UUIDGenerator
符合国际规范的UUID生成策略,使用JDK自带的UUID类来实现
UUIDHexGenerator
早期Hibernate提供的UUID生成器,被UUIDGenerator代替了
TableGenerator
基于数据库表的生成策略,相当于@GeneratedValue(strategy = GenerationType.TABLE)
SequenceIdentityGenerator
相当于@GeneratedValue(strategy = GenerationType.SEQUENCE)
SequenceHiLoGenerator
在复杂环境里面,也比较常用,如果集群太多,容易造成重复id。
2、hilo —— 使用一个高/低位算法生成的long、short或int类型的标识符,给定一个表和字段作为高位值的来源,默认的表是hibernate_unique_key,默认的字段是next_hi。它将id的产生源分成两部分,DB+内存,然后按照算法结合在一起产生id值,可以在很少的连接次数内产生多条记录,提高效率
@GenericGenerator(name = "hilo_generator", strategy = "hilo") //指定主键生成策略为hilo
@GeneratedValue(generator="hilo_generator")
3、native ——根据底层数据库的能力,从identity、sequence、hilo中选择一个
@GenericGenerator(name = "native_generator", strategy = "native")//指定主键生成策略为native
@GeneratedValue(generator="native_generator")
4、assigned——在插入数据的时候主键由程序处理(很常用),这是 <generator>元素没有指定时的默认生成策略。等同于JPA中的AUTO。
5、seqhilo ——sequence和hilo的结合,hilo的高位由sequence产生
6、increment——由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库。
因此所有的数据库都可以使用,但问题由于是Hibernate生成的,所以只能有一个Hibernate应用进程访问数据库,否则就会产生主键冲突,不能在集群情况下使用 。插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法
7、uuid.hex——使用一个128-bit的UUID算法生成字符串类型的标识符
8、foreign——使用外部表的字段作为主键
可参考该博文:http://blog.csdn.net/ygj26/article/details/5523781
- 2.1 注解主键生成策略(Generated identifier values)
- 注解 主键生成策略
- Hibernate4主键生成策略(注解方式)
- Hibernate4主键生成策略(注解方式)
- Hibernate注解,生成主键策略
- Hibernate 注解 主键生成策略
- hibernate注解主键生成策略
- hibernate注解主键生成策略
- hibernate注解主键生成策略
- Hibernate注解---主键生成策略
- Hibernate注解方法使用主键生成策略@GeneratedValue(三)
- hibernate注解之主键生成策略(二)
- JPA注解生成主键策略详解
- hibernate注解UUID主键生成策略
- hibernate中uuid主键注解生成策略
- JPA注解主键生成策略-UUID
- hibernate注解UUID主键生成策略
- hibernate JPA注解主键生成策略
- 012 相关性与线性表示总结;向量组的秩、向量组等价
- 疯狂Spring Cloud连载(10)REST客户端Feign介绍
- P2569 [SCOI2010]股票交易
- SPOJ
- MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
- 2.1 注解主键生成策略(Generated identifier values)
- linux服务器Tomcat启动速度慢的优化方法
- Closest Distance LightOJ
- Error:Execution failed for task ':app:mergeDebugResources'. > Crunching Cruncher bg_btn.9.png
- bzoj 1053 反素数 HAOI2007
- 呼吸灯效果动画
- MAVEN发布固定版本(不需要更改pom更新依赖的方法) -- 自动更新SNAPSHOT
- P2577 [ZJOI2005]午餐
- 有效处理 Java 异常三原则