Oracle19+Weblogic+Hibernate3栈下char(1)字段类型转换规则由哪决定?
类型转换规则的决定组件
数据库CHAR字段到Java类型的转换结果由三层组件共同决定,优先级从高到低如下:
- Oracle JDBC驱动(ojdbc8)
驱动本身是类型转换的核心执行单元,内置了Oracle字段类型到Java类型的默认映射规则,其中oracle.jdbc.J2EE13Compliant是直接控制CHAR(1)类型映射的核心参数:- 参数值为
true时,遵循J2EE 1.3规范要求,CHAR(1)字段会被映射为java.lang.Character类型 - 参数值为
false时,CHAR(1)字段会被映射为字符数组或java.lang.String类型
不同小版本的ojdbc8默认参数值存在差异,是环境不一致的常见诱因。
- 参数值为
- Weblogic应用服务器
Weblogic的数据源配置会覆盖JDBC驱动的默认参数,不同版本的Weblogic会默认给Oracle数据源配置不同的J2EE13Compliant值,也支持在数据源的自定义连接属性、JVM启动参数中手动修改该配置,不同环境的Weblogic配置差异是本次问题的最可能原因。 - Hibernate 3.x
使用createNativeQuery未指定结果映射规则时,Hibernate不会对JDBC返回的原生类型做额外转换,直接透传结果给上层调用,因此不参与本次类型转换的逻辑。
排查建议
直接对比异常环境和正常环境的Weblogic数据源连接属性、JVM启动参数中oracle.jdbc.J2EE13Compliant的配置值,即可快速定位差异来源。
内容的提问来源于stack exchange,提问作者marekzbrzozowa
相关产品推荐
相关产品推荐

