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

Mybatis-plus 集成 PostgreSQL 数据库自增序列问题记录

1.创建序列并绑定id

CREATE SEQUENCE biz_factory_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

"id" int4 NOT NULL DEFAULT nextval('sys_user_seq'::regclass),

2.实体设置KeySequence和TableId注解

image.png

注意IdType.INPUT 和 @KeySequence(value = "biz_factory_seq", dbType = DbType.POSTGRE_SQL)

3.GlobalConfig 配置 PostgreKeyGenerator

@EnableTransactionManagement
public class DataSourceConfig {...@Bean(name = "pgKeyGenerator")public PostgreKeyGenerator postgreKeyGenerator() {return new PostgreKeyGenerator();}@Bean(name = "dbConfig")public GlobalConfig.DbConfig dbConfig() {GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();dbConfig.setKeyGenerator(postgreKeyGenerator());return dbConfig;}@Bean(name = "globalConfig")public GlobalConfig globalConfig() {GlobalConfig globalConfig = new GlobalConfig();globalConfig.setDbConfig(dbConfig());return globalConfig;}}

4. 到这里应该就配置完成,可以正常新增并且使用序列自增id,但我的项目还是在报错:

### Error updating database. Cause: org.postgresql.util.PSQLException: ERROR: null value in column \"id\" of relation \"biz_factory\" violates not-null

  • 一直报错id为空,没有去获取序列的值,未配置成功
  • 然后就一直找问题,试了很多办法,依然没有解决
  • 后来我全局查看,我的项目用的多数据源,数据源单独配置了SqlSessionFactory,考虑是不是postgreKeyGenerator没有配置进去

5.解决

image.png

//添加mybatis-plus 对pg自用序列的主键自增配置
GlobalConfig conf = new GlobalConfig();
conf.setDbConfig(new GlobalConfig.DbConfig().setKeyGenerators(Arrays.asList(new PostgreKeyGenerator())));
factoryBean.setGlobalConfig(conf);
  • 将配置添加进SqlSessionFactory,然后就成功了
  • 先去查序列的值,再执行插入

6.总结

  • 这个问题,耗了一下午,一定要坚持不放弃
  • 全局审视非常重要

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自动驾驶决策和控制系统的研究
  • 【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...
  • k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028
  • 安卓14中Zygote初始化流程及源码分析
  • Redis的哨兵和集群实现高可用
  • 每天一个数据分析题(四百二十七)- 方差分析
  • debian 12 PXE Server 批量部署系统
  • Web开发 —— 放大镜效果(HTML、CSS、JavaScript)
  • DNSSec:网络安全的守护者
  • GIT相关操作,推送本地分支到远程仓库流程记录学习
  • C++ 数据结构探索:构建高效程序的基础
  • 在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
  • python库(10):SpaCy库实现NLP处理
  • 【面试题】Golang(第四篇)
  • json-server服务使用教程
  • python3.6+scrapy+mysql 爬虫实战
  • 【mysql】环境安装、服务启动、密码设置
  • Create React App 使用
  • MQ框架的比较
  • oldjun 检测网站的经验
  • Redis 懒删除(lazy free)简史
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • swift基础之_对象 实例方法 对象方法。
  • 离散点最小(凸)包围边界查找
  • 前端代码风格自动化系列(二)之Commitlint
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • mysql面试题分组并合并列
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # SpringBoot 如何让指定的Bean先加载
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)bark-ml
  • (2)(2.10) LTM telemetry
  • (2)nginx 安装、启停
  • (4.10~4.16)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)socket Aio demo
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (轉)JSON.stringify 语法实例讲解
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ./configure,make,make install的作用
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bashrc在哪里,alias妙用
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net OpenCVSharp生成灰度图和二值图
  • .net6+aspose.words导出word并转pdf
  • .NET成年了,然后呢?
  • .net知识和学习方法系列(二十一)CLR-枚举