数据实体类主键使用UUID生成策略

embedded/2024/9/24 4:20:12/
方式一:        推荐

        如果你使用的是JPA进行数据持久化操作的开发者,如何在实体类中配置UUID作为主键生成策略。通过@Entity、@Table、@GenericGenerator和@GeneratedValue等注解,可以实现自动为数据实体生成唯一的UUID主键,无需手动设置id字段。在执行save方法后,JPA将自动生成并插入32位长度的UUID到数据库对应的主键字段。

java">import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;
import java.io.Serializable;@Entity
@Getter
@Setter
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
@Table(name="sys_user")
public class UserEntity implements Serializable {@Id@GeneratedValue(generator = "jpa-uuid")@Column(name = "uuid", length = 32)private String uuid;@Column(name = "name")private String name;
}
方式二:

        使用@PrePersist注解来在对象被持久化到数据库之前生成一个UUID作为主键。

        首先你需要在你的实体类中使用@PrePersist注解标注一个方法,该方法负责生成UUID。

        在这个例子中,当你尝试将UserEntity对象保存到数据库中时,实际执行INSERT语句之前调用onCreate方法。如果id属性是null,方法内部会生成一个UUID并赋值给id属性。这样,每次保存UserEntity对象时,都会自动生成一个UUID作为主键。

java">import lombok.Getter;
import lombok.Setter;import javax.persistence.*;
import java.io.Serializable;
import java.util.UUID;@Entity
@Getter
@Setter
@Table(name="sys_user")
public class UserEntity implements Serializable {@PrePersistprotected void onCreate() {if (this.uuid == null) {this.uuid = UUID.randomUUID().toString();}}@Id@Column(name = "uuid", length = 32)private String uuid;
}
方式三:      不推荐 可能存在问题

        当你创建一个YourEntity对象时,它会自动生成一个UUID作为其ID。

        如果你想在数据库中使用UUID作为主键,确保你的数据库支持UUID类型的字段,并在实体类中适当地注解该属性,例如使用JPA的 @Id 和 @GeneratedValue 注解:

java">import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;@Entity
@Getter
@Setter
@Table(name="your_table")
public class YourEntity {public YourEntity() {this.id = UUID.randomUUID();}@Id@GeneratedValueprivate UUID id;// 其他的属性和方法
}

如果不支持UUID,这种方式有的可能会有问题 这时去掉 @GeneratedValue 或改成String 类型 尝试一下。


http://www.ppmy.cn/embedded/101818.html

相关文章

LongWriter——从长文本语言模型中释放出10,000+字的生成能力

概述 当前的长上下文大型语言模型 (LLM) 可以处理多达 100,000 个词的输入,但它们很难生成超过 2,000 个词的输出。受控实验表明,该模型的有效生成长度本质上受到监督微调(SFT) 期间看到的示例的限制。换句话说,这种输出限制源于现有 SFT 数…

【网络编程】第十一章 数据链路层 - 以太网(MAC+MTU+ARP+MSS+RARP)

文章目录 重点链路层以太网MAC帧格式碰撞域MAC地址MAC地址和IP地址 MTU-最大传输单元MTU 对 IP 的影响MTU 对 UDP 的影响MTU 对 TCP 的影响-MSS ARP协议ARP协议的工作流程ARP请求的过程ARP应答的过程 ARP 缓存中间人攻击 RARP协议 重点 数据链路层的作用:两个设备 …

【ORACLE】decode() 函数

在Oracle数据库中,DECODE 函数是一个非常有用的条件表达式,它类似于其他编程语言中的 switch-case 或 if-else 语句。DECODE 函数可以简化查询中的条件逻辑,使得SQL语句更加简洁和易于理解。 基本语法 DECODE 函数的基本语法如下&#xff1…

Java将数据导出为Excel文件

使用Apache POI生成基本Excel Apache POI是一个强大的Java库,用来处理Microsoft Office文件。对于Excel文件(.xls和.xlsx)处理,提供有HSSF(.xls)和XSSF(.xlsx)等API。 import org.…

一起搭WPF之列表数据绑定

一起搭WPF之列表数据绑定 1 前言2 数据绑定2.1 前端2.2 后端实现2.2.1 界面后台2.2.2 模型与逻辑 3 问题3.2 解决 总结 1 前言 之前已经简单介绍了列表的大致设计,在设计完列表界面后,我们可以开展列表的数据绑定,在前端显示我们的数据&…

基于x86 平台opencv的图像采集和seetaface6的静默活体功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的静默活体功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的静默活体模块从而实现…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

Shader 透明相关

1、设置深度写入与渲染队列 深度写入 深度写入默认是开启,需要通过渲染状态中的 ZWrite off 指令主动关闭深度写入 当我们把它写在Pass渲染通道中时,它只会影响该Pass 若我们把它写在SubShader语句块中,它将影响其中的所有Pass …