Spring Data:JPA 存储库 findAll() 返回 \*Map 而不是 List?

新手上路,请多包涵

我有一个 Spring Data JPA 存储库接口,看起来像这样:

 @Repository
public interface DBReportRepository extends JpaRepository<TransactionModel, Long> {

    List<TransactionModel> findAll();
    List<TransactionModel> findByClientId(Long id);
}

是否有一种解决方法可以使 Collection 返回类型 HashMap<K, V> ?我查看了 Spring Data 类,除了 List<> 返回值之外找不到任何其他内容。

原文由 Deniss M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 839
2 个回答

我不认为你会找到一个更简单的解决方案来创建一个简单的单线来将你的结果转换为地图。使用 Java 8 lambdas 简单快速:

 Map<Long, Transaction> transactionMap = transactionList.stream()
         .collect(Collectors.toMap(Transaction::getId, Function.identity()));

原文由 Patrick 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是必须解决类似的问题,帕特里克的回答有所帮助,但可以通过指示添加位置来改进。

为了让它看起来像 JPA 存储库返回一个映射,一个改进是将其包装在存储库接口的默认方法中。使您不必在所有消费类中执行流。

 @Repository
public interface DBReportRepository extends JpaRepository<TransactionModel, Long> {

    List<TransactionModel> findAll();

    default Map<Long, TransactionModel> findAllMap() {
        return findAll().stream().collect(Collectors.toMap(TransactionModel::getId, v -> v));
    }

    List<TransactionModel> findByClientId(Long id);

    default Map<Long, TransactionModel> findByClientIdMap(Long id) {
        return findByClientId(id).stream().collect(Collectors.toMap(TransactionModel::getId, v -> v));
    }
}

原文由 Matt R 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题