J'ai une interface de référentiel Spring Data JPA qui ressemble à ceci:
@Repository
public interface DBReportRepository extends JpaRepository<TransactionModel, Long> {
List<TransactionModel> findAll();
List<TransactionModel> findByClientId(Long id);
}
Existe-t-il une solution de contournement pour faire la même chose, mais pour une collection à renvoyer de type HashMap<K, V>
? J'ai parcouru les classes de données Spring et je n'ai trouvé rien d'autre que les valeurs de liste <>.
Je ne pense pas que vous trouviez une solution plus simple pour créer un seul support permettant de convertir votre résultat en carte. C'est simple et rapide avec Java 8 lambdas:
Map<Long, Transaction> transactionMap = transactionList.stream()
.collect(Collectors.toMap(Transaction::getId, Function.identity()));
Il suffisait de résoudre quelque chose de similaire et la réponse de Patricks a aidé, mais cela peut être amélioré en indiquant où l'ajouter.
Pour faire en sorte que le référentiel JPA renvoie une carte, une amélioration consisterait à intégrer cette méthode dans une méthode par défaut dans l'interface du référentiel. Vous évite d'avoir à exécuter un flux dans toutes les classes consommatrices.
@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));
}
}