当前位置:   article > 正文

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

mybatis plus pg id自增

1.创建序列并绑定id

  1. CREATE SEQUENCE biz_factory_seq
  2. START WITH 1
  3. INCREMENT BY 1
  4. NO MINVALUE
  5. NO MAXVALUE
  6. 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

  1. @EnableTransactionManagement
  2. public class DataSourceConfig {
  3. ...
  4. @Bean(name = "pgKeyGenerator")
  5. public PostgreKeyGenerator postgreKeyGenerator() {
  6. return new PostgreKeyGenerator();
  7. }
  8. @Bean(name = "dbConfig")
  9. public GlobalConfig.DbConfig dbConfig() {
  10. GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
  11. dbConfig.setKeyGenerator(postgreKeyGenerator());
  12. return dbConfig;
  13. }
  14. @Bean(name = "globalConfig")
  15. public GlobalConfig globalConfig() {
  16. GlobalConfig globalConfig = new GlobalConfig();
  17. globalConfig.setDbConfig(dbConfig());
  18. return globalConfig;
  19. }
  20. }

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

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

6.总结

  • 这个问题,耗了一下午,一定要坚持不放弃
  • 全局审视非常重要
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/870316
推荐阅读
相关标签
  

闽ICP备14008679号