当前位置: 首页 > news >正文

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

方式一:        推荐

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

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作为主键。

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 注解:

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.mrgr.cn/news/13277.html

相关文章:

  • 每日刷力扣SQL题(七)
  • iPhone不停重启怎么办?全面解析与解决方案
  • 【html+css 绚丽Loading】000022 三元循环轮
  • 软件开发最佳实践:接口设计、自测与效率提升
  • Spring 源码解读:逐步实现 IoC 容器,深入理解 Spring 核心原理
  • 你知道有哪些Spring MVC扩展点可以解析接口参数和处理返回值吗?
  • 笔试算法—编程练习-01-H-24
  • C++实现的活动安排问题
  • 实际项目中Gson的用法,解析对象嵌套list对象的问题
  • 图表检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
  • 计算机毕业设计选题推荐-房产信息管理系统-Java/Python项目实战
  • 逆波兰表达式
  • WinTune 系统基准测试:让你的电脑性能飞速提升
  • 【51单片机】2-3-1 【I/O口】【电动车防盗报警项目】震动传感器实验1—震动点灯
  • 学懂C++(四十一):网络编程——深入详解 C++ 网络编程之 WebSocket 应用技术
  • Openstack 与 Ceph集群搭建(下): Openstack部署
  • 鸿蒙开发:深入浅出Stage模型(UIAbility组件)
  • 操作系统原子操作
  • 线上考试系统---虚拟化技术部署
  • PHP多门店民宿酒店预订系统小程序源码