源码解析,浅谈spring-data-jpa 中莫名的查询字段不存在问题


org.springframework.data.mapping.PropertyReferenceException: No property XXX found for type XXXXX!
终究的原因是spring-data-commons版本低导致的,升级到新版本就没问题了,或者在查询时添加的Sort中的Orderby参数 不带下划线就可以了
如果想了解源码的可以继续往下看, 让你了解怎样去查看源码
起因是在用spring boot jpa时 findAll查询报错了

大概的意思是OrderForm这个类中不存在order属性
然而使用ctrl+f 去查询动态的predicate中也没有拼接这个属性
然后我们再来看看报错的原因

先看第一行,
1.打好断点进来,抛出异样的原因是74行为空,

owningType.getProperty(propertyName);
打断点可以看到owningType 就是对应的OrderForm的类也就是我们查询的映射类,从这句话也可以知道是propertyName出了问题,也就是入参的name出问题, 第一个参数出问题 记住

接着我们根据报错一层一层向上找
2.at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329) 这个类的329行

329行 第一个参数 source 继续往上找
3.at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309)

还是第一个参数source 继续往上找
4.at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272)

272行的第一个参数是parts.next(),看上面的代码可以知道是通过source参数正则转换后获得的列表
记住依旧是第一个参数往上找
5.at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243)

6.at org.springframework.data.jpa.repository.query.QueryUtils.toJpaOrder(QueryUtils.java:543)

依旧是第一个参数order中的property属性
7.at org.springframework.data.jpa.repository.query.QueryUtils.toOrders(QueryUtils.java:497)

第一个参数order是来自sort,sort是入参中的第一个参数
8.at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:653)

这里的sort是入参的第三个参数 Sort ,错误的地方也渐渐明朗了起来,可以猜出是Sort的属性导致的问题
9.at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:608)

第三个参数sort是来自pageable,是第二个入参
10.at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:407)

这里找到findAll了 就知道哪里的问题了 是入参pageable的问题导致
接下来查看自己的业务代码


我传入的pageable 定义了order_id字段作为orderby
重新断点进入一层层捕获,看看是哪个环节出问题

可以发现是之前的问题4的方法中出了问题,断点进入查看参数值


传入的 order_id 被
这两行正则后 变成了两个属性order,id

而之后又用这两个属性去判断是否属于映射的类中(这里即OrderForm)如下图

接着去github查最新的代码

github上最新的代码已经更新这句匹配的代码,(这句匹配分组应该是用来orderby多个字段解析的)
到这里已经根据查出了原因
本地的 spring-data-commons是1.13.1的版本 而maven上已经到2.0.2了

所以还是用新一点稳定点的包比较靠谱
源码解析,浅谈spring-data-jpa 中莫名的查询字段不存在问题


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值