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

jpa创建自定义UUID,且符合IETF RFC 4122,不会出警告

先说下自己创建uuid的好处,就是可以自己指定id,自己不指定的时候自己生成,更加灵活,而默认的是声明以后,自己再传进去的id就会被忽略。

默认的注解生成方式如下:

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID",strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = COLUMN_ID_NAME, nullable = false)
    public String getId() {
        return id;
    }

下面是自己继承重写:


import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.UUIDGenerator;
import org.hibernate.id.uuid.StandardRandomStrategy;
import org.hibernate.type.descriptor.java.UUIDTypeDescriptor;

import java.io.Serializable;
import java.lang.reflect.Field;

/***
 * 自定义的主键生成器,替代org.hibernate.id.UUIDGenerator
 * 可以实现自己设置uuid时采用自己设置的,不设置使用默认的
 * @author yishuo
 * @date 2023/11/26 4:52:16
 */
public class MyUUIDUtil  extends UUIDGenerator {
    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object obj) {
        try {
            Field field = obj.getClass().getDeclaredField("id");
            field.setAccessible(true);
            String id = (String) field.get(obj);
            if (id!=null) {
                return id.substring(0,32);
            }
        } catch (NoSuchFieldException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return UUIDTypeDescriptor.ToStringTransformer.INSTANCE.transform( StandardRandomStrategy.INSTANCE.generateUUID( session ) ).replace("-","");
    }
}

我是存的32长度的id,所以把“-”去掉了,采用这种方式不会警告:does not generate IETF RFC 4122 compliant UUID values

使用自己重写的UUID协议,也类似上面,如下:

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID",strategy = "com.yishuo.xst.util.MyUUIDUtil")
    @Column(name = COLUMN_ID_NAME, nullable = false)
    public String getId() {
        return id;
    }


http://www.kler.cn/a/145687.html

相关文章:

  • 7.8 ChatGPT 开发者模式实战:第三方天气查询平台对接,如何打造爆款天气应用?
  • 等变即插即用图像重建
  • pikachu靶场-敏感信息泄露概述
  • 26考研资料分享 百度网盘
  • 代码随想录算法训练营第 14 天(树2)| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 【MySQL】数据库基础知识
  • 原生javascript实现放大镜效果
  • 【数据中台】开源项目(1)-LarkMidTable
  • Windows安装mysql8.0
  • 超好玩C++控制台打飞机小游戏,附源码
  • 红队攻防文库文章集锦
  • 【代码】考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度matlab-yalmip-cplex/gurob
  • 分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现
  • cmake教程
  • Let’s xrOS 一款让你优先体验社区创作者的 visionOS App工具
  • 保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档
  • C语言之内存函数
  • uni-app 跨端开发注意事项
  • Clickhouse设置多磁盘存储策略
  • 基本数据结构二叉树(1)
  • openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态
  • Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!
  • 监控同一局域网内其它主机上网访问信息
  • Hadoop发行版 Cloudera CDH 6.3.2及CM 安装包下载(阿里云盘 不限速)
  • 解决Vscode使用git提交卡住的问题
  • 第一百八十一回 如何绘制阴影效果