Spring 4.x升5.2.24、Hibernate 4升5.3.20后Bean属性读取异常求助
问题排查与解决方案
1. 校验JavaBean规范的getter方法命名
Spring 5.x 对JavaBean属性访问的规则比4.x更严格,严格遵循JavaBean规范:
- 若属性名前两个字符均为大写(如
SOURCE_SYSTEM),对应的getter方法必须为getSOURCE_SYSTEM(),而非getSourceSystem() - 若属性名首字符大写、次字符小写,getter需将属性名首字母小写后拼接(如属性
SourceSystem对应getSourceSystem())
检查RefundProcessingModel中SOURCE_SYSTEM的getter方法是否符合规范:
// 正确示例(匹配属性SOURCE_SYSTEM) public String getSOURCE_SYSTEM() { return SOURCE_SYSTEM; } // 错误写法(Spring 5.x无法识别) public String getSourceSystem() { return SOURCE_SYSTEM; }
2. 检查Hibernate映射文件(hbm.xml)配置
Hibernate 5.3对实体映射的校验更严格:
- 确认
<property>标签的name属性与实体类属性名完全一致(含大小写):<!-- 正确配置:name值与实体属性SOURCE_SYSTEM完全匹配 --> <property name="SOURCE_SYSTEM" column="SOURCE_SYSTEM" type="string"/> - 若映射中指定了
access属性,确认其合理性:access="field":直接访问字段,无需getter,但Spring的BeanWrapper仍会校验getter(若该Bean在Spring上下文使用)access="property":通过getter/setter访问,必须保证方法符合规范
3. 排查Spring上下文对该Bean的使用场景
若该Bean用于Spring表单绑定、数据绑定(如@ModelAttribute、DataBinder),Spring会通过BeanWrapper解析属性:
- 确认视图层(如JSP、Thymeleaf)是否直接引用了
SOURCE_SYSTEM属性,且对应的getter不符合规范 - 临时方案可配置
DataBinder忽略该属性校验,但优先建议修正getter方法以符合规范
4. 验证实体类字段的访问权限
确保SOURCE_SYSTEM字段为private修饰,且getter方法为public修饰,Spring与Hibernate均需访问该方法。
若以上步骤未解决问题,请补充以下信息:
RefundProcessingModel中SOURCE_SYSTEM属性的完整代码(字段定义+getter/setter)- hbm.xml中该属性的映射片段
- 完整的异常堆栈日志
内容的提问来源于stack exchange,提问作者Selvi
相关产品推荐
相关产品推荐

