Извлекайте HashMap вместо сущности из репозитория Spring с помощью ehcache - PullRequest
0 голосов
/ 28 июня 2018

Я использую ehcache для кэширования данных в моем весеннем проекте.

Например, если вы выбираете таблицу данных mst_store, то в настоящее время я использую код ниже

public interface MstStateRepository extends JpaRepository<MstState, Integer> {

@Override
@Cacheable("getAllState")
List<MstState> findAll();

Вы можете видеть, что findAll метод return List<MstState>

Но вместо List, что мне нужно, возвращаемый тип как Map. Имеет в виду ключ как stateId и объект в Value.

Я могу сделать это в метке обслуживания, но мне нужно написать отдельную логику для этого, как показано ниже

@Service 
class CacheService {
    @Autowired
    private MstStateRepository mstStateRepository;

    Map<Integer, MstState> cacheData = new HashMap<>();

    public List<MstState> findAllState() {
        List<MstState> mstStates = mstStateRepository.findAll();

        for (MstState mstState : mstStates) {
            cacheData.put(mstState.getStateId);
            cacheData.value(mstState);
        }
    }   
}

Таким образом, вместо написания отдельной логики мы можем напрямую получить Map из хранилища. Пожалуйста, предложите

1 Ответ

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

Вы можете использовать методы Java 8 default для этого, что позволит вам написать реализацию по умолчанию, которая может быть переопределена jpa, но не будет, и с помощью также введенных в Java 8 потоков:

public interface MstStateRepository extends JpaRepository<MstState, Integer> {

    @Cacheable("getAllState")
    default Map<Integer, MstState> getAllState(){
        return findAll().stream()
            .collect(Collectors.toMap(
                MstState:.getStateId, 
                UnaryOperator.identity()
            ));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...