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.总结

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

相关推荐

  1. PostgreSQL解决序列(id)自动增长冲突

    2024-07-13 06:32:04       47 阅读
  2. 达梦数据库集成mybatis-plus

    2024-07-13 06:32:04       34 阅读
  3. PostgreSql 设置字段

    2024-07-13 06:32:04       67 阅读
  4. springboot集成mybatis-plus

    2024-07-13 06:32:04       50 阅读
  5. SpringBoot集成MyBatis-Plus

    2024-07-13 06:32:04       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 06:32:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 06:32:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 06:32:04       57 阅读
  4. Python语言-面向对象

    2024-07-13 06:32:04       68 阅读

热门阅读

  1. MongoDB部署模式分析

    2024-07-13 06:32:04       24 阅读
  2. Docker 安装 PostgreSQL

    2024-07-13 06:32:04       28 阅读
  3. MongoDB 数据库引用

    2024-07-13 06:32:04       25 阅读
  4. LINQ详解

    2024-07-13 06:32:04       20 阅读
  5. 三级_网络技术_14_局域网技术基础及应用

    2024-07-13 06:32:04       23 阅读
  6. TCP网络传输控制协议

    2024-07-13 06:32:04       23 阅读
  7. 医疗健康信息的安全挑战与隐私保护最佳实践

    2024-07-13 06:32:04       27 阅读
  8. SqlServer数据库常见问题

    2024-07-13 06:32:04       26 阅读
  9. debian KVM安装虚拟机

    2024-07-13 06:32:04       21 阅读
  10. 【深度学习】本地运行 GraphRAG + Ollama

    2024-07-13 06:32:04       24 阅读