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

SpringBoot更新数据库时出现NotReadablePropertyException异常求助

解决SpringBoot更新数据库时的NotReadablePropertyException异常

嘿,我来帮你搞定这个问题!你遇到的org.springframework.beans.NotReadablePropertyException异常,核心原因是Spring试图访问District类的stateId属性,但你的District实体里根本没定义这个字段——District中是通过private State state;这个关联对象来和State表建立关系的,而非直接存stateId字段。

咱们来看代码里的问题:

1. 最明显的错误:用错了Repository保存实体

看你StateCityDistrictImpl类里的updateDistrict方法,最后一行写的是:

return stateRepository.saveAndFlush(district);

这完全是搞混了!stateRepository是用来操作State实体的,你把District对象传给它,Spring Data JPA在处理时会按照State的属性规则去解析District的字段,自然找不到stateId(State有这个字段,但District没有),直接触发异常。

修复方法:把这行改成用districtRepository来保存:

return districtRepository.saveAndFlush(district);

2. 额外检查:是否有隐式的属性拷贝操作

如果上面的修复后还报错,那你要排查下有没有在其他地方用了BeanUtils.copyProperties这类工具,直接把DistrictBean的属性拷贝到District对象上。因为DistrictBean里有stateId字段,但District里只有state对象,没有对应的stateId属性,这种自动拷贝就会抛出这个异常。

如果是这种情况,就保持你现在手动处理关联关系的方式:

State state = new State();
state.setStateId(districtBean.getStateId());
district.setState(state);

别依赖自动拷贝工具处理关联对象。

小优化建议

另外,关于关联对象的设置,我建议你不要直接new一个只带id的State对象,最好先从数据库查询出真实的State记录,避免潜在的外键约束错误:

State state = stateRepository.findById(districtBean.getStateId())
        .orElseThrow(() -> new StudawnException(ErrorCode.STATE_NOT_FOUND));
district.setState(state);

这样能确保你关联的State是真实存在于数据库中的,避免无效的外键值。

内容的提问来源于stack exchange,提问作者Muthukumaran K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:07