在定义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生成策略相关推荐

  1. MySQL之主键ID生成策略

    5种全局ID生成方式.优缺点及改进方案 全局唯一id特点: 1.数据库自增长序列或字段生成id 2.UUID 3.Redis生成ID 4.zookeeper生成ID 5.Twitter的snowfla ...

  2. 分库分表的 9种分布式主键ID 生成方案

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  3. 分库分表的 9种分布式主键ID 生成方案,挺全乎的

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  4. java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake

    祝大家新年快乐,有任何问题可与我联系: 关于snowflake算法的介绍和原理这里不过多说明了,网上有很多. 这里简单描述下SnowflakeUtil的优点: 1.做为底层工具使用,可用于数据库主键. ...

  5. hibernate中主键的生成策略

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  6. 如何用分库分表的9种分布式主键ID生成方案?附小技巧

    1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用. 如果你连Postman都还没有用过,不 ...

  7. 如何用分库分表的9种分布式主键ID生成方案?完整PDF

    前言 前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料--JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番- 我将JAVA核心进阶手册大 ...

  8. java生成主键id,java自定义主键生成器

    1. 实体类代码 @Entity @Data @Table(name = "user") public class User implements Serializable { @ ...

  9. ibernate ID生成策略 小知识

    hibernate ID生成策略<generator class="assigned"></generator>,我之前知道常用的四个:native ide ...

最新文章

  1. string与数值之间的转换
  2. rman实验——测试备份压缩
  3. python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
  4. 对用户密码进行md5加密的代码实现
  5. 543. 二叉树的直径
  6. CMOS图像传感器——工作原理
  7. 快慢指针:141. 环形链表(判断是否存在环路)
  8. 物资申请php,php学生捐赠物品管理系统
  9. 用模板写单链表 尹成
  10. abaqus python 建立节点集合_在Python中创建Abaqus集
  11. JavaScript replace string 替换字符
  12. C语言指针——基础知识理解
  13. power bi 雷达图_【自助式数据分析平台——WonderBI(豌豆BI)】免费在线试用_软件库...
  14. 如何删除mysql软链接,Linux中移除(删除)符号链接的命令
  15. 2.对memcached进行curd操作
  16. C,LINUX,数据结构部分
  17. 李宏毅机器学习笔记【未完】
  18. Android 最常用的设计模式五 安卓源码分析——建造者模式
  19. 旧项目归档:旅游年卡-旅游直通车-微信二级分销推广会员-汽车租赁-金币提现-司机乘务管理-景点线路乘车预约
  20. 舞蹈课(dance.cpp/c/pas)

热门文章

  1. Windows 7 Embedded快速入门-安装
  2. 2020杭电多校训练(第一、二场)
  3. 为 RIDE 创建快捷方式(Python3.7)版本
  4. 怎么查询网站备案?枫树综合批量查询站长工具支持一键查询多个网站备案
  5. 神犇营-my1088-麻将游戏
  6. 四种常见的WordPress主题开发错误
  7. 交通期刊排名(2021.6更新)
  8. 如何停止第一个mysql_如何停止mysqld
  9. IDEA2021安装教程
  10. CS:GO官方封禁超304000作弊帐号;任天堂疑似开发工具、源代码等机密数据泄露;Valorant上线全新处罚功能已修改