使用ehcache从Spring存储库中获取HashMap而不是实体

时间:2018-06-28 12:57:32

标签: java spring ehcache

我正在使用ehcache在spring项目中缓存数据。

例如,如果您要获取数据mst_store表,则当前我正在使用以下代码

public interface MstStateRepository extends JpaRepository<MstState, Integer> {

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

您可以看到findAll方法返回了List<MstState>

但是我没有列出我需要的返回类型作为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 :(得分:1)

您可以使用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()
            ));
    }
}