关于mongoDB的upsert方法属性不一致报错记录

在尝试使用MongoDB的upsert方法插入诗句时遇到异常,异常信息涉及java.lang.IllegalAccessError。问题源于更新和插入操作过程中,QueryMapper类的mappedObject方法映射对象时字段别名匹配失败。进一步调查发现是由于项目中的spring-data-mongo的jar包版本冲突,特别是spring-commons的版本不一致。在Spring 4.2.0之后的MongoDB库中,某个方法不存在导致报错。解决办法是解决jar包冲突,确保所有包版本兼容。此问题的排查经验提示我们,遇到类似错误要检查属性传递、jar包冲突和版本兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于mongoDB的upsert方法属性不一致报错记录
使用mongoDB添加诗句的时候出现Exception in thread “main” java.lang.IllegalAccessError: tried to access class org.springframework.beans.PropertyMatc错误。
查询了大量文章,跑了源码发现mongodb的upsert方法有一个更新和插入的操作。
在这里插入图片描述
先进行进行查询操作。在进行插入操作。然后就会发生如下错误:
org.springframework.data.mongodb.core.convert.QueryMapper#getMappedObject(org.bson.conversions.Bson, org.springframework.data.mongodb.core.mapping.MongoPersistentEntity<?>)方法就是直接用来映射对象的,在这个方法中的代码Field field = createPropertyField(entity, key, mappingContext);是用来构建字段的映射关系。

最终会指向org.springframework.data.mongodb.core.convert.QueryMapper.MetadataBackedField#getPath(java.lang.String)这个方法中出问题的就是PropertyPath path = PropertyPath.from(pathExpression.replaceAll("\.\d+", “”), entity.getTypeInformation());这行代码又会调用org.springframework.data.mapping.PropertyPath#from(java.lang.String, org.springframework.data.util.TypeInformation<?>)
当我们字段别名映射不上时,报错。

还有,因为我项目之前是分布式的,由于需求改为单点项目。架构的各种包的版本不一致。我的这个是由于spring-data-mongo的其中的spring-commons的jar包版本冲突导致。这个包中含有upsert方法的getTypeInformation的定义。而我使用的11.1的版本和冲突的11.3的版本中,11.3没有这个方法。是因为在spring4.2.0之后的mongo增加了大量的自动配置功能,具体的就问度娘。所以不存在这个方法,从而找不到属性配置,而报错。找到原因直接解决冲突。搞定。现在已经是凌晨了,没时间上图了,恢复bug也要时间,就这样简单的记录下。以防忘记。
还有许多是jar冲突引起的各种错误,以后碰到这种进入源码的报错第一时间警惕,
第一:属性传值有误,
第二:jar包冲突,
第三:版本不兼容。
睡觉…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值