使用@Id时主键生成策略:TABLE、SEQUENCE、IDENTITY、AUTO

2023-11-13

主键生成策略:GenerationType.TABLE、GenerationType.SEQUENCE、GenerationType.IDENTITY、GenerationType.AUTO

TABLE:
使用一个特定的数据库表格来保存主键,持久化引擎通过关系数据库的一张特定的表格来生成主键,这种策略的好处就是不依赖于外部环境和数据库的具体实现,在不同数据库间可以很容易的进行移植,但由于其不能充分利用数据库的特性,所以不会优先使用。该策略一般与另外一个注解@TableGenerator一起使用【指定了生成主键的表(可以在class类上指定也可以在 Id 上指定)】,然后JPA将会根据注解内容自动生成一张表作为序列表(或使用现有的序列表)。如果不指定序列表,则会生成一张默认的序列表,表中的列名也是自动生成,数据库上会生成一张名为sequence的表(SEQ_NAME,SEQ_COUNT)。序列表一般只包含两个字段:第一个字段是该生成策略的名称,第二个字段是该关系表的最大序号,它会随着数据的插入逐渐累加。
例如:

@Id
@GeneratedValue(strategy=GenereationType.TABLE,generator="table_gen")
@TableGenerator(name="table_gen",table="fendo_generator",pkColumnName="seq_name",pkColumnValue="fendos",valueColumnName="seq_id",initialValue=1,allocationSize=1)

解释:
//name对应@GeneratedValue中generator的值。
//table对应序列的数据表名
//pkColumnName是数据表中主键对应序列表中的列名。
//pkColumnValue是数据表中主键对应序列表中的列名的值。
//valueColumnName是主键当前值,每次累加
//initialValue是初始值
//allocationSize是每次主键的累加值

SEQUENCE
根据底层数据库的序列来生成主键,条件是数据库支持序列(Oracle,DB2,Mysql不支持序列,所以不能使用)。
例如:

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="fendo_seq")
@SequenceGenerator(name="fendo_seq",sequenceName="seq_name")

解释:
//name:name属性: 表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
//sequenceName:标识生成策略用到的数据库序列名称。
//initialValue:主键初始值。(默认0)
//allocationSize:主键每次累加值。(默认50)

IDENTITY:主键由数据库自动生成(主要是自动增长型,常用于Mysql数据库)
例如:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

解释 :
strategy = GenerationType.IDENTITY:自增长主键生成策略。

AUTO: 主键由程序控制。
把主键生成策略交给持久化引擎(persistence engine),持久化引擎会根据数据库在以上三种主键生成策略中选择其中一种。常用,JPA默认的生成策略就是GenerationType.AUTO,可显示指定为
@GeneratedValue(strategy = GenerationType.AUTO),或直接省略不写@GeneratedValue

@GenericGenerator注解----自定义主键生成策略
一般配合@GeneratorValue使用:

@GeneratedValue(generator = "paymentableGenerator")    
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned") 

解释:
name属性指定生成器名称。
strategy属性指定具体生成器的类名。

strategy 参数如下:

static {  
 
  GENERATORS.put("uuid", UUIDHexGenerator.class); 
 
  GENERATORS.put("hilo", TableHiLoGenerator.class); 
 
  GENERATORS.put("assigned", Assigned.class); 
 
  GENERATORS.put("identity", IdentityGenerator.class); 
 
  GENERATORS.put("select", SelectGenerator.class); 
 
  GENERATORS.put("sequence", SequenceGenerator.class); 
 
  GENERATORS.put("seqhilo", SequenceHiLoGenerator.class); 
 
  GENERATORS.put("increment", IncrementGenerator.class); 
 
  GENERATORS.put("foreign", ForeignGenerator.class); 
 
  GENERATORS.put("guid", GUIDGenerator.class); 
 
  GENERATORS.put("uuid.hex", UUIDHexGenerator.class);//uuid.hex is deprecated  
 
  GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class); 
 
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用@Id时主键生成策略:TABLE、SEQUENCE、IDENTITY、AUTO 的相关文章

随机推荐

  • 多目录时Makefile 的编写方法

    多级目录结构的Makefile 本文主要以例程的方式展示了二级目录结构下的Makefile的写法 详细注释 对于更加纷杂的多级目录 大家可在此基础上进行修改 定义变量 ARCH默认为x86 使用gcc编译器 否则使用arm编译器 ARCH
  • 学机器人就是编程吗

    学机器人就是编程吗 小孩的学习从古至今都是家长们十分关心和重视的一件事情 很多家长在培养孩子的学习方面也是非常的用心的 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于学机器人就是
  • Python 3 – 文件 readline() 方法

    Python 3 文件 readline 方法 极客笔记 打开文件 file open example txt r 读取文件中的一行数据 line file readline while line 移除行尾的换行符 print line s
  • Linux——lseek函数、stat函数、lstat和stat、linux和Unix隐式回收、目录操作函数

    一 lseek函数 获取文件大小示例 扩展文件大小示例 但是如果要真改变文件大小必须有I O读写操作 无I O示例的扩展 结果 原来大小是777 扩展111 lseek是888 但是文件大小还是777 加上I O操作 即加个write 最重
  • 看看Ubuntu22.10的几个新功能值不值得更新和升级

    目录 前言 桌面可用性和性能提升 优化的开发者工作流 支持微控制器和嵌入式显示器 升级企业管理工具 前言 2022年10月20日 Ubuntu开发商Canonical宣布正式推出Ubuntu 22 10 代号 Kinetic Kudu Ca
  • html弹窗代码只弹窗一次,js 弹出框只弹一次(二次修改后)

    弹出框只弹一次 edit www jquerycn cn var returnvalue function openpopup colorbox inline true href getGiftForm innerWidth 650px i
  • raid读写速度对比_深入分析各种raid级别相对单盘速度变化

    入分析各种raid级别相对单盘速度变化 RAID0用分片存储方式把数据分布在两个盘或更多盘上 读写持续传输速率会增加一倍 随机读写速度按理论是有可能增加的 这取决于数据分片大小和读写的大小 不过总的来说很值得怀疑 硬件RAID1的随机和持续
  • 3D茶壶绘制_2021秋季《计算机图形学》_基于《计算机图形学(第四版)》D.H.&M.P.B.&W.R.C.

    一 实验目的 绘制3D茶壶 形状为传统的紫砂茶壶 用光照模型着色 用键盘实现旋转 二 实验环境 Visual Studio 2019 Windows 10 三 算法分析与设计 四 实验结果 旋转 五 附录 include
  • pycharm之pip

    不知道朋友们用过maven没有 使用JAVA编程的人应该有人用过这个有趣的东西 JAVA导包是容易的 然而 懒是没有极限了 所以maven出来了 一个丰满的开发包仓库 不需要你再去哪儿找找找 但是这又算得了什么 我们伟大的Python怎么可
  • Android网络开源库-Retrofit(二) 文件上传、下载及进度监听

    1 写在前面的话 首先说明 我还没太搞懂retrofit 目前 这篇博客只能给出这几个内容 文件上传 文件下载 文件下载的进度监听 还有这两点没弄好 多文件一次上传 批量上传 文件上传进度监听 当前使用版本 compile com squa
  • 使用element UI的日期选择器,默认显示当天日期及7天前日期

    方法一 采用选择器 type datetimerange 默认获取内容为时间戳
  • 毕业设计-基于机器视觉的路面裂缝检测装置-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 系统架构及工作原理 二 图像传输和处置 三 裂缝检测 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力
  • oracle驱动重启吗,Troubleshooting for oracle

    本文总结与归纳了平常遇到的一些关于Oracle 18c的错误以及处理方法 会不定期的进行更新 1 dbca Fails With PRCR 1006 PRCR 1071 CRS 2566 这里的asm环境使用了Oracle ASM Filt
  • BGP基础实验(4)联邦划分

    目录 前言 一 实验拓扑图 二 实验目的 三 实验配置 1 路由器声明BGP进程 2 普通EBGP邻居建立 3 联邦IBGP邻居建立 4 联邦EBGP邻居建立 四 实验观测 五 实验总结 前言 网盘资源 BGP基础实验 联邦划分 zip 蓝
  • Linux01-虚拟机安装(VMware15+CentOS7)

    一 虚拟机介绍 虚拟机 Virtual Machine 指通过软件模拟的具有完整硬件系统功能的 运行在一个完全隔离环境中的完整计算机系统 在实体计算机中能够完成的工作在虚拟机中都能够实现 在计算机中创建虚拟机时 需要将实体机的部分硬盘和内存
  • 使用百度AI开放平台进行车牌识别

    文章目录 百度AI开放平台车牌识别使用 1 产生token 2 车牌识别 3 解析结果 参考 本文介绍了如何使用百度AI开放平台获取token 以及如何调用百度API接口 请求车牌识别 以及对结果进行解析 并根据百度返回的坐标值画出车牌所在
  • 使用Jasmine在Angular中测试组件:第1部分

    您将要创造的 测试驱动开发是一种编程实践 已由地球上每个开发人员社区宣讲和推广 但这是开发人员在学习新框架时经常忽略的例程 从第一天开始编写单元测试 将帮助您编写更好的代码 轻松发现错误并维护更好的开发工作流程 Angular中的测试驱动开
  • 六级单词词汇表(有注音)

    英语六级备考词汇表 abnormal b n m l a 不正常的 变态的 abolish b li vt 废除 取消 abrupt br pt a 突然的 意外的 唐突的 absurd b s d a 不合理的 荒唐的 abundance
  • python-16进制字符串和16进制数字转换

    0xa1 0x09 0x1c 0xef gt a1 09 1c ef b xa1 x09 x1c xef hex a1091cef a1 09 1c ef gt 0xa1 0x09 0x1c 0xef bytes fromhex a1091
  • 使用@Id时主键生成策略:TABLE、SEQUENCE、IDENTITY、AUTO

    主键生成策略 GenerationType TABLE GenerationType SEQUENCE GenerationType IDENTITY GenerationType AUTO TABLE 使用一个特定的数据库表格来保存主键