Spring JPA问题:findByUserName无法查询到数据的原因排查
问题分析与解决
首先看你接口返回的结果,userId=1的那条数据的userName是"root",但你请求时传入的查询参数是name=rooter——这就是找不到数据的核心原因:你查询的用户名和数据库里实际存储的用户名不匹配。
具体排查点:
数据不一致问题
你提供的表结构描述里,USER_NAME的值是rooter,但接口返回的真实数据里,userName却是root,这说明要么是你写的表结构有误,要么是数据库里的实际记录和你预期的不一样。建议直接执行SQL查询确认:SELECT USER_NAME FROM USERS WHERE USER_ID = 1;查出来的结果大概率是
root,而不是你描述的rooter,所以用rooter作为查询条件自然返回null。Repository方法的正确性
你的UserRepository里的findByUserName方法是符合Spring Data JPA命名规范的,它会正确对应实体类的userName属性,进而映射到数据库的USER_NAME字段,方法本身没有问题。大小写敏感排查(可选)
如果你的数据库(比如Linux环境下的MySQL)开启了大小写敏感配置,那要确保查询字符串和数据库值的大小写完全一致,但从返回结果看这里是完全不同的字符串(rootvsrooter),所以这个可能性很低。
解决办法:
- 如果你希望用
name=rooter查询到数据,就修改数据库中USER_ID=1的记录,把USER_NAME字段的值改成rooter; - 如果你接受数据库里的真实值,就把请求参数改成
name=root,这样findByUserName就能查到对应数据了。
内容的提问来源于stack exchange,提问作者Mice in Shadow
相关产品推荐
相关产品推荐

