WebSphere使用JNDI数据源连接DB2时SQLCODE=-204问题排查
问题排查:Spring Boot JPA在WebSphere使用JNDI数据源时SQLCODE=-204错误
问题现象
- 本地嵌入式Tomcat环境下,用JDBC数据源配置的Spring Boot JPA应用运行正常
- 部署到WebSphere应用服务器(WAS)改用JNDI数据源后,触发SQLCODE=-204错误(对象未找到)
- 实体类
@Table注解带schema时,报错SNEA_WPI.SNEA_AUTH为未定义名称 - 移除schema仅保留
@Table(name = "SNEA_AUTH")后,报错DB_USERNM.SNEA_AUTH为未定义名称
- 实体类
- 本地仅在手动给Hibernate查询中的
schema.tablename加双引号时,才会复现该错误
当前应用配置
spring.datasource.jndi-name=jdbc/potusdb spring.jpa.properties.hibernate.default_schema=SNEA_WPI spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy spring.jpa.database-platform=org.hibernate.dialect.DB2Dialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2Dialect spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true
排查方向
- 检查WAS数据源的默认schema设置:WAS的JNDI数据源可能覆盖Hibernate配置的
default_schema,需确认数据源连接属性是否指定了默认schema,或当前用户的默认schema是否为DB_USERNM而非SNEA_WPI - 验证Hibernate命名策略的引号处理:
EJB3NamingStrategy在WAS环境下可能自动给表名、schema加双引号,而DB2中带双引号的标识符区分大小写,导致匹配不到实际对象;可尝试添加spring.jpa.properties.hibernate.globally_quoted_identifiers=false禁用自动引号生成 - 确认DB2对象权限与存在性:核实
SNEA_WPI.SNEA_AUTH表确实存在,且WAS数据源使用的数据库用户有访问该表的权限;同时确认DB_USERNMschema下无此表 - 对比本地与WAS的数据源参数:检查两端JDBC驱动版本、连接参数(如
currentSchema)是否一致,本地JDBC可能通过URL指定了currentSchema=SNEA_WPI,而WAS数据源未配置该参数 - 测试显式指定schema的写法:在
@Table中显式写schema = "SNEA_WPI",同时确保名称大小写与数据库中对象完全匹配(DB2默认标识符不区分大小写,但加引号后会区分)
内容的提问来源于stack exchange,提问作者Nikhil Silveira
相关产品推荐
相关产品推荐

