Spring Data JPA Redis: невозможно написать запрос на основе пользовательского метода - PullRequest
0 голосов
/ 29 июня 2018

Я сконфигурировал Spring Data JPA с Redis и использовал RedisRepositories с такими методами, как find(), findAll() и т. Д. Все эти методы работают нормально, но я не могу написать свой собственный метод, например .

RedisEntity findByGenderAndGrade (Пол строки, класс строки);

RedisEntity - это простой класс POJO Entity. Если вам нужна дополнительная информация, пожалуйста, сообщите мне об этом в сообщениях.

Следующее - моя сущность:

@Data
@RedisHash("test1")
public class RedisEntity implements Serializable {

    @Id
    @GeneratedValue
    private String id;
    private String name;
    private String gender;
    private Integer grade;
}

Repository:

@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 и также сохранять их.

По просьбе Франсуа Дюпира,

@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;
    }
}

Кроме того, я ссылался на эту статью: Статья Baeldung о данных Redis Redis

1 Ответ

0 голосов
/ 29 июня 2018

У нас есть библиотека данных Redis Redis, которая предоставляет возможности для написания пользовательского метода. Присоединение примера кода.

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>

Определение сущности

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

    @Id
    private String employeeId;

    private String firstName;

    private String lastName;

    private String gender;

    private String grade;

}

Определение хранилища

@Repository
public interface RedisEntityRepository extends CrudRepository<RedisEntity, String>{

    List<RedisEntity>  findAllByGenderAndGrade(String gender, String grade);
}

Осуществление

@Component
public class RedisEntityImpl implements RedisEntityService {

    @Autowired
    private RedisEntityRepository redisEntityRepository;

    @Override
    public List<RedisEntity> getAllByGenderAndGrade(String gender, String grade) {
        return redisEntityRepository.findAllByGenderAndGrade(gender,grade);
    }
}

Свойства

spring.cache.type = redis
spring.redis.host = localhost
spring.redis.port = 6379
...