Il existe souvent une question métier pour afficher toutes les catégories et la fréquence d'utilisation de ces catégories.Méthode privilégiée pour mapper un ensemble de résultats avec l'entité et le nombre à l'aide des données de base
Cette question est facile de répondre à une requête:
SELECT c.*, count(*) FROM category_assignment ca LEFT JOIN category c on ca.c_id = c.id group by c.id
Ce que je vous demande est votre suggérât pour cartographier l'ensemble des résultats selon les critères suivants:
@Entity
public class CategoryAssignment {
@Id
int id;
@ManyToOne(fetch = FetchType.EAGER)
private Category category;
@ManyToOne(fetch = FetchType.EAGER)
private Car car;
}
@Entity
public class Category {
@Id
String id;
TypeEnum type;
...
}
@Entity
public class Car {
@Id
int id;
String name;
...
}
De mon point de vue le meilleur résultat de la cartographie serait d'obtenir un objet personnalisé qui contient la catégorie en tant qu'entité et le nombre de comptage en tant que variable supplémentaire dès la fin de l'appel du référentiel:
MappingResult result = repository.getCategoriesAndTheirCountOfType(TypeEnum type);
public class MappingResult {
Category category;
BigInteger count;
}
Seule la façon dont j'ai pu y parvenir jusqu'à maintenant consistait à mapper le jeu de résultats manuellement. Mais j'espère qu'il y a des façons plus faciles de la cartographier.
Merci. Je connaissais Projections mais je n'arrivais pas à le coder correctement. Votre réponse me laisse dans la bonne direction. Ma plus grosse erreur a été de définir @Query (nativeQuery = true) qui exécute SQL. Ce dont j'avais besoin était Jpql et donc pas besoin du drapeau nativeQuery. –