Spring Data JPA Redis:无法编写基于自定义方法的查询

Ayu*_*gam 6 redis java-8 spring-data-jpa spring-boot spring-repositories

我已经使用 Redis 配置了 Spring Data JPA,并使用RedisRepositorieswith 提供了诸如 等方法find()findAll()所有这些方法似乎都工作得很好,但我无法编写我的自定义方法。

\n\n
\n

RedisEntity findByGenderAndGrade(String 性别, String 年级);

\n
\n\n

RedisEntity 是一个简单的 POJO 实体类。如果您想了解更多信息,请在消息中告诉我。

\n\n

以下是我的实体:

\n\n
@Data\n@RedisHash("test1")\npublic class RedisEntity implements Serializable {\n\n    @Id\n    @GeneratedValue\n    private String id;\n    private String name;\n    private String gender;\n    private Integer grade;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

存储库:

\n\n
@Repository\npublic interface TestRepository extends JpaRepository<RedisEntity, String> {\n\n    List<RedisEntity> findAllByGender(String gender);\n    List<RedisEntity> findAllByGrade(Integer grade);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

服务/控制器:

\n\n
        @Override\n        public List<RedisEntity> getById(String id) {\n            return testRepository.findById(id); //returns data perfectly.\n        }\n        @Override\n        public List<RedisEntity> getAllByGender(String gender) {\n            return testRepository.findAllByGender(gender); //returns [] \n        }\n\n        @Override\n        public void saveEntity(RedisEntity redisEntity) {\n            testRepository.save(redisEntity); // saves it in redis perfectly.\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,\nfindByGender 和 findAllByGender 都给出 [],尽管我可以在我的 redis 数据库中查看数据并保存它。

\n\n

根据 Fran\xc3\xa7oisDupire 的要求,

\n\n
@Configuration\npublic class RedisConfig {\n\n    @Autowired\n    private DeploymentProperties deploymentProperties;\n\n    private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);\n\n    @Bean\n    JedisConnectionFactory jedisConnectionFactory() {\n        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);\n        redisStandaloneConfiguration.setPassword(RedisPassword.of("root"));\n        return new JedisConnectionFactory(redisStandaloneConfiguration);\n    }\n\n    @Bean\n    public RedisTemplate<String, Object> redisTemplate() {\n        RedisTemplate<String, Object> template = new RedisTemplate<>();\n        template.setConnectionFactory(jedisConnectionFactory());\n        return template;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,我还提到了这篇文章:Baeldung 的 Spring data redis 文章

\n

Ayu*_*gam 5

正如@JoshJ提到并经我自己和其他人验证,问题的解决方案是:

将 @Indexed 注释添加 到需要与所有查找一起使用的所有列/字段。

@Data
@RedisHash("EmployeeDetails")
public class RedisEntity {

 @Id
 private String employeeId;

 private String firstName;

 private String lastName;

 @Indexed
 private String gender;

 @Indexed
 private String grade;

}
Run Code Online (Sandbox Code Playgroud)