You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA操作IBM DB2/AS400报未定义列名异常及save死锁问题求助

异常根因

  1. 该未定义列名异常与实体类和业务表的列名匹配无关,从调用栈可以定位到异常出现在Hibernate启动阶段读取IBM DB2/AS400的系统序列元数据的逻辑中:默认的序列元数据提取器查询系统表时使用的列名,与AS400实际系统表的列名不匹配,因此抛出列未定义错误。
  2. 启动时该异常被上层框架捕获后未终止应用,但是Hibernate的JDBC环境初始化不完整,对应的数据库连接/事务资源未被正常释放,后续调用repository.save()方法时,要么需要等待未初始化完成的核心资源,要么因为连接池被占满无法获取有效连接,表现为长时间等待、类死锁的现象。

解决方案

  • 方案1(优先选择):关闭Hibernate自动Schema校验
    若你的应用不需要Hibernate自动创建/校验表结构,直接在配置文件中关闭该功能即可跳过序列元数据读取逻辑:
    # application.properties 配置
    spring.jpa.hibernate.ddl-auto=none
    
  • 方案2:指定适配DB2/AS400的Hibernate方言
    更换Hibernate方言为专门适配AS400的版本,内置兼容的系统元数据读取逻辑:
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2400Dialect
    
  • 修复实体类与Repository的不合理配置
    1. 主键字段不能设置为可空:你当前@Id标注的MEMBER_ID加了nullable = true属性,不符合主键约束要求,要么删除该属性确保插入时主键有值,要么增加@GeneratedValue注解指定主键生成策略。
    2. 移除Repository的重复继承:JpaRepository已经原生继承了CrudRepository,不需要重复继承,修改为如下即可:
      public interface DailyErrorRepository extends JpaRepository<DailyErrorVO, String> {
      }
      

内容的提问来源于stack exchange,提问作者Janapureddy Ramakrishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:04