JPA使用GenerationType.TABLE生成主键
1、新建保存每张表最新主键的 主键表
2、修改实体类上的主键生成策略
//进行映射的表的名称 @Entity public class Customer { private Integer id; private String lastName; private String email; private int age; private Date createdTime; private Date birth; //生成主键的方式 @TableGenerator(name="ID_GENERATOR", //name 属性表示该主键生成策略的名称,它被引用在@GeneratedValue中设置的generator 值中 table="JPA_ID_GENERATOR",//table 属性表示表生成策略所持久化的表名 pkColumnName="PK_NAME",//表示在持久化表中,该主键生成策略所对应键值的名称 pkColumnValue="CUSTOMER_ID", // CUSTOMER_ID 对应的 PK_VALUE存储的就是 Customer表最新的一条数据的主键 valueColumnName="PK_VALUE",//持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加 allocationSize=50) /*@GeneratedValue(strategy=GenerationType.AUTO)*/ @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="LAST_NAME",length=255,nullable=false) public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Column(name="EMAIL",length=50,nullable=false) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Column(name="AGE") public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 创建时间精确到时间戳 @Column(name="CREATED_TIME") @Temporal(TemporalType.TIMESTAMP) public Date getCreatedTime() { return createdTime; } public void setCreatedTime(Date createdTime) { this.createdTime = createdTime; } //生日则精确到天 @Column(name="BIRTH") @Temporal(TemporalType.DATE) public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } @Override public String toString() { return "Customer [id=" + id + ", lastName=" + lastName + ", email=" + email + ", age=" + age + ", createdTime=" + createdTime + ", birth=" + birth + "]"; } }
3、测试
1) 查看控制台打印
//每次向业务表插入数据时,去主键表查询该业务表的主键 Hibernate: select PK_VALUE from JPA_ID_GENERATOR where PK_NAME = 'CUSTOMER_ID' for update Hibernate: insert into JPA_ID_GENERATOR (PK_NAME, PK_VALUE) values ('CUSTOMER_ID', ?) Hibernate: update JPA_ID_GENERATOR set PK_VALUE = ? where PK_VALUE = ? and PK_NAME = 'CUSTOMER_ID' Hibernate: insert into Customer (AGE, BIRTH, CREATED_TIME, EMAIL, LAST_NAME, id) values (?, ?, ?, ?, ?, ?)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?