私は次のようなSpring Data JPAリポジトリインターフェイスを持っています。
@Repository
public interface DBReportRepository extends JpaRepository<TransactionModel, Long> {
List<TransactionModel> findAll();
List<TransactionModel> findByClientId(Long id);
}
同じことを行うための回避策はありますが、HashMap<K, V>
タイプのコレクションが返されますか? Spring Dataクラスを調べましたが、List <>の戻り値以外は見つかりませんでした。
結果をマップに変換するシンプルなワンライナーを作成するより簡単な解決策が見つかるとは思いません。 Java 8ラムダで簡単かつ高速です:
Map<Long, Transaction> transactionMap = transactionList.stream()
.collect(Collectors.toMap(Transaction::getId, Function.identity()));
同様のことを解決する必要があり、パトリックスの回答は役に立ちましたが、どこに追加するかを指示することで改善できます。
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));
}
}