Mybatis-plus 集成 PostgreSQL 数据库自增序列问题记录
发布日期:2025-04-14 08:42:18 浏览次数:13 分类:精选文章

本文共 1486 字,大约阅读时间需要 4 分钟。

PostgreSQL 主键自增配置解决方案

1. 创建序列并绑定id

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

在数据库表中,id字段的定义应如下:

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

2. 实体设置KeySequence和TableId注解

确保在实体类中使用合适的注解:

@Id
@KeySequence(value = "biz_factory_seq", dbType = DbType.POSTGRE_SQL)

3. 全局配置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为空,未获取序列值:可能是KeyGenerator未正确配置。
  • 多数据源配置:确保PostgreKeyGenerator已添加至SqlSessionFactory中。
  • 解决方法:

  • 添加PostgreKeyGenerator到SqlSessionFactory
  • GlobalConfig conf = new GlobalConfig();
    conf.setDbConfig(new GlobalConfig.DbConfig().setKeyGenerators(Arrays.asList(new PostgreKeyGenerator())));
    factoryBean.setGlobalConfig(conf);
    1. 确保插入前获取序列值
    2. // 获取序列下一个值
      Long id = keyGenerator.nextValue();
      // 插入数据
      bizFactory.set_id(id);

      5. 总结

      这个问题耗时较长,但坚持审视问题最终能够解决。全局审视和正确配置是关键,确保所有组件协同工作。

    上一篇:MyBatis-Plus 还手写 Join 联表查询?一个依赖轻松搞定,真香!
    下一篇:Mybatis-Plus+SpringBoot框架详解

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年05月12日 09时15分08秒