Requêtes JPQL au sein du JPA La spécification offre une prise en charge native du renvoi d'objets personnalisés.
Définir une classe de bean simple pour représenter le structure de sortie souhaitée :
<code class="java">public class SurveyAnswerStatistics { private String answer; private Long cnt; // Constructor }</code>
Mettre à jour la méthode du référentiel pour renvoyer les instances du bean personnalisé :
<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(); }</code>
Bien que les requêtes natives ne prennent pas directement en charge le nouveau mot-clé, les interfaces Spring Data Projection offrent une alternative solution:
Créer une interface de projection avec des propriétés correspondant à la sortie souhaitée : p>
<code class="java">public interface SurveyAnswerStatistics { String getAnswer(); int getCnt(); }</code>
Mettre à jour la méthode du référentiel pour renvoyer les propriétés projetées :
<code class="java">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>
Utilisez le mot-clé SQL AS pour mapper les champs de résultats aux propriétés de projection de manière transparente.
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!