JPA 主键ID生成策略
在定义Entity的ID字段时,我们可以使用@GeneratedValue注解指定以何种方式生成数据库的主键ID的值。有几种策略:
1. 默认情况下,是自动生成策略。
比如下边两种方式效果是一样的。如果使用的是Springboot JPA Data, 那hibernate会自动帮我们创建一个Sequence,然后通过该Sequence,为所有生成策略是Auto的表使用该Sequence,也就是多个表共享一个Sequence。
@Entity
public class Student {@Id@GeneratedValueprivate long studentId;// ...
}@Entity
public class Student {@Id@GeneratedValue(strategy = GenerationType.AUTO)private long studentId;// ...
}
2. IDENTITY生成策略。
就是ORM框架不负责生成ID,而是由数据库创建表时,将主键列,制定成自增(auto increment)。应用程序向数据库插入数据时,无需指定该列的值。
@Entity
public class Student {@Id@GeneratedValue (strategy = GenerationType.IDENTITY)private long studentId;// ...
}
3. 我们自定义的数据库的Sequence方式。
这也是Hibernate官方推荐的方式,为每一个表创建一个Sequence。Hibernate在生成@ID标注的字段的值时,先访问数据库,查询下一个Sequence的值,再封装完整的insert语句插入数据。
@Entity
public class User {@Id@GeneratedValue(generator = "sequence-generator")@GenericGenerator(name = "sequence-generator",strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",parameters = {@Parameter(name = "sequence_name", value = "user_sequence"),@Parameter(name = "initial_value", value = "4"),@Parameter(name = "increment_size", value = "1")})private long userId;// ...
}
另外,还有表的方式生成ID主键值,不推荐,这里不详细说了。
参考文档:
https://www.baeldung.com/hibernate-identifiers
JPA 主键ID生成策略相关推荐
- MySQL之主键ID生成策略
5种全局ID生成方式.优缺点及改进方案 全局唯一id特点: 1.数据库自增长序列或字段生成id 2.UUID 3.Redis生成ID 4.zookeeper生成ID 5.Twitter的snowfla ...
- 分库分表的 9种分布式主键ID 生成方案
<sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...
- 分库分表的 9种分布式主键ID 生成方案,挺全乎的
<sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...
- java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake
祝大家新年快乐,有任何问题可与我联系: 关于snowflake算法的介绍和原理这里不过多说明了,网上有很多. 这里简单描述下SnowflakeUtil的优点: 1.做为底层工具使用,可用于数据库主键. ...
- hibernate中主键的生成策略
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- 如何用分库分表的9种分布式主键ID生成方案?附小技巧
1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用. 如果你连Postman都还没有用过,不 ...
- 如何用分库分表的9种分布式主键ID生成方案?完整PDF
前言 前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料--JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番- 我将JAVA核心进阶手册大 ...
- java生成主键id,java自定义主键生成器
1. 实体类代码 @Entity @Data @Table(name = "user") public class User implements Serializable { @ ...
- ibernate ID生成策略 小知识
hibernate ID生成策略<generator class="assigned"></generator>,我之前知道常用的四个:native ide ...
最新文章
- string与数值之间的转换
- rman实验——测试备份压缩
- python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
- 对用户密码进行md5加密的代码实现
- 543. 二叉树的直径
- CMOS图像传感器——工作原理
- 快慢指针:141. 环形链表(判断是否存在环路)
- 物资申请php,php学生捐赠物品管理系统
- 用模板写单链表 尹成
- abaqus python 建立节点集合_在Python中创建Abaqus集
- JavaScript replace string 替换字符
- C语言指针——基础知识理解
- power bi 雷达图_【自助式数据分析平台——WonderBI(豌豆BI)】免费在线试用_软件库...
- 如何删除mysql软链接,Linux中移除(删除)符号链接的命令
- 2.对memcached进行curd操作
- C,LINUX,数据结构部分
- 李宏毅机器学习笔记【未完】
- Android 最常用的设计模式五 安卓源码分析——建造者模式
- 旧项目归档:旅游年卡-旅游直通车-微信二级分销推广会员-汽车租赁-金币提现-司机乘务管理-景点线路乘车预约
- 舞蹈课(dance.cpp/c/pas)