我已经配置了Spring Data JPA与Redis,并使用
此外,无论是findByGender还是findAllByGender都返回[],尽管我可以在我的redis数据库中看到数据并成功保存。根据FrançoisDupire的要求,进行翻译。
RedisRepositories
提供的方法,如find()
、findAll()
等。所有这些方法似乎都很好用,但我无法编写自定义方法,例如:
RedisEntity findByGenderAndGrade(String gender, String grade);
RedisEntity是一个简单的POJO实体类。如果您需要更多信息,请在消息中告诉我。
以下是我的实体:
@Data
@RedisHash("test1")
public class RedisEntity implements Serializable {
@Id
@GeneratedValue
private String id;
private String name;
private String gender;
private Integer grade;
}
代码库:
@Repository
public interface TestRepository extends JpaRepository<RedisEntity, String> {
List<RedisEntity> findAllByGender(String gender);
List<RedisEntity> findAllByGrade(Integer grade);
}
服务/控制器:
@Override
public List<RedisEntity> getById(String id) {
return testRepository.findById(id); //returns data perfectly.
}
@Override
public List<RedisEntity> getAllByGender(String gender) {
return testRepository.findAllByGender(gender); //returns []
}
@Override
public void saveEntity(RedisEntity redisEntity) {
testRepository.save(redisEntity); // saves it in redis perfectly.
}
此外,无论是findByGender还是findAllByGender都返回[],尽管我可以在我的redis数据库中看到数据并成功保存。根据FrançoisDupire的要求,进行翻译。
@Configuration
public class RedisConfig {
@Autowired
private DeploymentProperties deploymentProperties;
private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);
@Bean
JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
redisStandaloneConfiguration.setPassword(RedisPassword.of("root"));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
}
另外,我还参考了这篇文章:Spring data redis的Baeldung文章
gender
和grade
上添加@Indexed
才能使查找功能正常工作。 - Josh J