@TableGenerator

深入解析 @TableGenerator 在 H2 数据库中的应用 通过上述实例,我们可以看到在 H2 数据库中的强大功能。它不仅可以灵活地生成主键值,还可以通过参数配置满足不同的需求。无论是在单个实体类中使用,还是多个实体类共享,都能很好地完成任务。希望本文的解析能帮助你更好地理解和使用。 阅读详情
最近工作中遇到了许多用表生成器TableGenerator来生成主键的项目,刚接触的朋友可能对TableGenerator 表生成器还不是很了解,因为大家如果是个人做项目练习着来玩的话,基本上都是用自增来实现TableGenerator 表生成器的功能。下面为大家来讲解一下,并附带实例;
首先,我们一起来看一下Java EE 5框架API文档的描述:
javax.persistenceAnnotation Type TableGenerator
Javax.persistence包下注解类型:TableGenerator  意思是说,TableGenerator是用来注解用的,而不是像我们平常所用的类那样:new TableGenerator();
因此,它的定义是:public @interface TableGenerator
说明:定义@interface的类型是注解类型.
接着:
This annotation defines a primary key generator that may be referenced by name when a generator element is specified for the GeneratedValue annotation. A table generator may be specified on the entity class or on the primary key field or property. The scope of the generator name is global to the persistence unit (across all generator types).  
@TableGenerator注解定义了主键生成器,当@GeneratedValue的属性'generator' 与@TableGenerator的属性'name'相同时,将引用这个表生成器。一个表产生器可能在实体类别或最初的主键域或特性上被指定, 产生器的名字对持久组件的实体。
Go on...
实例:
........  
@Entity  
@Table(name="lucene_user")  
public class User {  
    @Id  
    @GeneratedValue(strategy=GenerationType.TABLE,generator="UserGen")  
    @TableGenerator(name="UserGen",table="tb_generator", pkColumnName="gen_name",pkColumnValue="user_pk", allocationSize=1)  
    private int id;  
    @Column(name="user_id")  
    private int userId;  
      
    @Column(name="name")  
    private String name;  
......set和get方法......  
} 
说明:在上面的User实体中,在定义的开始就已经用@Entity注解了User类,@Table(name="lucene_user") 注解说明了,实体User对应的数据库表名为:lucene_user.

创建表生成器数据表:tb_generator
create table tb_generator(  
id int(20) unsigned not null auto_increment,  
gen_name varchar(255) not null,  
gen_value int(20) not null,  
primary key (id)  
);  
接着插入一条数据,以下要用到:
    insert into tb_generator(gen_name,gen_value) values('user_pk',1); 

重点,主键的登场:
Java代码  收藏代码
  1. @Id  
  2. @GeneratedValue(strategy=GenerationType.TABLE,generator="UserGen")  
  3. @TableGenerator(name="UserGen",table="tb_generator", pkColumnName="gen_name",pkColumnValue="user_pk", allocationSize=1)  
  4. private int id;  


@TableGenerator表生成器名称为:UserGen,数据库的表为:tb_generator 创建新的实体后"user_pk"的value的值将自动加1。

@GeneratedValue声明了表的生成策略及引用的表生成器。

再看官方Api的实例:
 Example 1:  
   @Entity public class Employee {  
       ...  
       @TableGenerator(  
           name="empGen",   
           table="ID_GEN",   
           pkColumnName="GEN_KEY",   
           valueColumnName="GEN_VALUE",   
           pkColumnValue="EMP_ID",   
           allocationSize=1)  
       @Id  
       @GeneratedValue(strategy=TABLE, generator="empGen")  
       public int id;  
       ...  
   }  
     
   Example 2:  
   @Entity public class Address {  
       ...  
       @TableGenerator(  
           name="addressGen",   
           table="ID_GEN",   
           pkColumnName="GEN_KEY",   
           valueColumnName="GEN_VALUE",   
           pkColumnValue="ADDR_ID")  
       @Id  
       @GeneratedValue(strategy=TABLE, generator="addressGen")  
       public int id;  
       ...  
}  

详细:@TableGenerator表生成器属性
l      name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
l      table属性表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
l      catalog属性和schema具体指定表所在的目录名或是数据库名。
l      pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
l       valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值
l      pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。
l       initialValue表示主键初识值,默认为0。
l       allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。

@TableGenerator的优点:
1.适用于任何的数据库
2.方便管理主键

3.避免了数据库兼容性带来的一系列的问题.
表生成器 @TableGenerator NULL 博文链接:https://mqyl1.iteye.com/blog/1098358 立即下载

相关推荐

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

springboot-jpa通过表完成分布式id 生成, @GeneratedValue和@TableGenerator用法

springboot 整合 jpa 通过 表的方式生成唯一id,可以进行集群部署。

weixin_44122204的博客 886

Mit6.S081-实验1-Xv6 and Unix utilities

Mit6.S081-实验1-Xv6 and Unix utilities前言一、Boot xv61,实验目的2,操作流程1)切换到xv6-labs-2020代码库的lab1分支2)启动xv63)测试xv64)过程分析5)其他操作二、在xv6中添加一个自己编写的程序1,源码准备2,编译配置3,测试添加程序4,过程分析三、xv6中shell简析 前言 一、Boot xv6 1,实验目的 利用qemu启动xv6 2,操作流程 1)切换到xv6-labs-2020代码库的lab1分支 git checkout ut

code a better life~ 36万+

表生成器(@TableGenerator)使用注意事项

用途:将当前主键的值单独保存到数据库的一张表里去,主键的值每次都是从该表中查询获得,适用于任何数据库,不必担心兼容问题。 常规配置,看下面例子: @Id @Column(name = "id") @TableGenerator(name = "hf_opert_id_gen", //此处的名字要和下面绿色标注的对应 table = "mcs_hibernate_seq", //主键保

sdaq23的博客 1万+

边云协同智能进化:大模型与小模型的动态训练与高效部署策略

本文深入探讨了边云协同架构下大模型与小模型的动态训练与高效部署策略。通过物流分拣、医疗影像等实战案例,展示了如何利用边云协作框架实现AI模型的智能进化,显著提升处理效率与准确性。重点解析了动态任务分配、增量学习和知识蒸馏等关键技术,为分布式训练场景提供优化方案。

work3的博客 191

基于DNN、CNN与SVM的串联电弧故障智能检测:从原理到嵌入式部署

在电气安全与工业物联网领域,时间序列分类是处理传感器信号、实现状态监测与故障诊断的核心技术。其原理在于从连续的信号数据中提取有效特征,并利用机器学习模型识别异常模式。这项技术的核心价值在于能够实现设备预测性维护、提升系统安全性并降低运维成本,广泛应用于智能电表、电机健康监测、电力设备保护等场景。本文聚焦于电气安全中的一个具体且危险的隐患——串联电弧故障的检测。针对这一隐蔽性强、传统方法误报率高的问题,项目深入实践了三种主流AI模型:深度神经网络、卷积神经网络和支持向量机。通过对比DNN的通用特征学习能力、C

weixin_31860973的博客 413

表生成器@ TableGenerator

 将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。使用以下SQL脚本创建一个表“tb_generator”,并插入两条数据,SQL脚本如下所示。CREATE TABLE  tb_generator (  id int(20) unsigne

孔子说 1887

麒麟银河操作系统V10部署ffmpeg(也能用于Linux系统)

部署ffmpeg用来处理视频的各种操作,如编码解码,格式转换,剪辑,处理实时视频流,音频流,加滤镜等

zhouwenxing666的博客 9041

Hibernate框架-@TableGenerator注解

主键的值以查询的形式从一个特定的表中获取,获取完之后修改主键值,理论上可以兼容任何数据库。 要配合@GeneratedValue注解—— 注解声明了主键的生成策略。有如下属性:

msidolphin的博客 1615

SAP 打印输出中 `#` 字符替代日文汉字的根本原因与全面解决方案

只要认清设备类型 / 字符集 / 字体三角关系,并合理利用PDFUCSWINCF或 UPE + URDT,LP01里那些恼人的就会彻底消失,日文汉字将在纸面与 PDF 中如预览一样完美呈现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 816

electron:解决打包后报错Cannot find module ‘X‘ 运行报错各种模块缺失问题(解决electron build打包后运行应用报错启动失败或白屏,无论模块名称是什么都能解决!)

Electron app打包后启动报错:“Cannot find module 'X'”解决方案,electron-builder 打包出现 cannot find module,electron 打包后找不到module问题,electron打包运行白屏、Can not find modules ‘x‘,electron项目打包报错,electron打包后,点击生成的exe应用程序出现Cannot find module,解决electron-build打包后运行app报错:cannot find mod

✅ 精选推荐文章 4385

表生成器 @TableGenerator

用途:         将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式 也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。 @TableGenerator注解属性解释:          name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generat

ledefe的专栏 1157

基于EB工具的TC3xx_MCAL配置开发05_ADC模块硬件Pwm触发Demo配置

基于EB工具,硬件Pwm触发ADC采集Demo配置详细介绍

initiallizer的博客 3509

@tablegenerator mysql,是“initialValue”的元素Hibernate JPA中不支持@TableGenerator?

@TableGenerator(name="Emp_Gen",table="ID_GEN", pkColumnName = "GEN_NAME",pkColumnValue = "Employee_GEN",valueColumnName = "GEN_VAL",initialValue = 1000,allocationSize = 100)Every is ok,but initialValu...

weixin_36068015的博客 199

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Hibernate 用@TableGenerator 生成Id

package com.bjsxt.hibernate; import java.util.Date; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValu...

wenzhixindazhi的专栏 174

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

表生成器@TableGenerator

@TableGenerator 是在数据库生成一张表来管理主键生成策略imp ort javax.persistence.TableGenerator;@TableGenerator( name = "Teacher_GEN", // TableGenerator's name table = "GENERATOR_TABLE", // 表名 pkColumnName = ...

weixin_33738982的博客 200

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Hibernate的@TableGenerator

表 1. JPA 的四种主键生成器 生成器名称 描述 AUTO 由 JPA 提供者根据数据库自行决定生成算法。 IDENTITY 由数据库的自增列提供主键值。 SEQUENCE 由数据库 Sequence 对象提供主键值。 TABLE 由 JPA 提供者通过创建数据库表来记录生成的主键值。 TableGe

from_the_star的博客 615

探索 Hibernate 新 TableGenerator 机制 @TableGenerator

Hibernate 从 3.2.3 之后引入了两个新的主键生成器 TableGenerator 和 SequenceStyleGenerator。为了保持与旧版本的兼容,这两个新主键生成器在默认情况下不会被启用,而不启用新 TableGenerator 的 Hibernate 在提供 JPA 的 @TableGenerator 注解时会有 Bug。本文从这个 Bug 开始,讲述了如何启用新 Tab

Genge 4234

@tablegenerator mysql,MyBatis Generator实现MySQL分页插件

在使用Mybatis进行分页操作时,比较常用用PageHelper这个插件来做分页的,可是这个插件相对来说配置还是比较繁复而且很多功能其实项目中是用不到的。虽然PageHelper提供了多数据库支持,可国内大多数项目还是以MySQL数据库为主,所以想到利用MyBatis Generator提供的插件拓展来生成相应limit语句实现Mysql的分页功能。具体使用和实现可以参照开源项目1.增加Mave...

weixin_39718888的博客 217
上一篇: @BeforeClass/@AfterClass 和 @Before/@After的区别
下一篇: Hibernate核心开发接口
randomnet
博客等级 码龄19年 59粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值