Lors de l'exécution de requêtes complexes à l'aide de Spring Data JPA, il devient nécessaire de renvoyer des objets personnalisés plutôt que les entités par défaut. Un de ces scénarios consiste à regrouper les résultats par champ spécifique et à récupérer le décompte pour chaque groupe. Cet article explorera deux méthodes pour y parvenir : une pour les requêtes JPQL et une pour les requêtes natives.
JPQL fournit une prise en charge native pour renvoyer des objets personnalisés à l'aide du nouveau mot-clé. Voici comment procéder :
<code class="java">public interface SurveyRepository extends CrudRepository<Survey, Long> { @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer") List<SurveyAnswerStatistics> findSurveyCount(); } public class SurveyAnswerStatistics { private String answer; private Long cnt; // getters and setters here }</code>
Les requêtes natives ne prennent pas en charge le nouveau mot-clé. Utilisez plutôt les interfaces de projection Spring Data :
<code class="java">public interface SurveyAnswerStatistics { String getAnswer(); int getCnt(); } public interface SurveyRepository extends CrudRepository<Survey, Long> { @Query(nativeQuery = true, value = "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer") List<SurveyAnswerStatistics> findSurveyCount(); }</code>
Remarques importantes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!