Redis Jpa Repository按嵌套对象id查询无结果,如何编写正确方法名
问题根源及解决方案
核心问题1:Repository继承类型错误
你当前继承的JpaRepository是Spring Data为关系型数据库设计的Repository接口,不支持Redis的嵌套属性查询逻辑,需要替换为Spring Data Redis提供的RedisRepository。
核心问题2:嵌套查询字段未加索引
Spring Data Redis仅会对标注了@Indexed的字段建立二级索引,没有索引的字段无法通过方法名查询命中,你需要给ImeiResponse类中需要查询的imei字段添加@Indexed注解。
修正后的代码
1. 修正ImeiResponse类
@Data public class ImeiResponse { @Indexed // 新增索引注解 private String imei; private String type; }
2. 修正Repository定义
@Repository // 替换继承的父接口为RedisRepository public interface NeirRepository extends RedisRepository<NeirResponse, String> { // 该方法名写法本身是正确的,无需修改 Optional<NeirResponse> findByImeiListImei(String imei); }
注意事项
修改注解后需要删除Redis中已存在的旧数据,重新写入新数据才会生成对应的imei字段索引,此时查询才会返回正确结果。
如果需要验证索引是否生成,可以通过Redis CLI查询是否存在格式为imei:imeiList.imei:{对应imei值}的索引键。
内容的提问来源于stack exchange,提问作者mahfuj asif
相关产品推荐
相关产品推荐

