Récupérer uniquement le premier/dernier élément à l'aide de Spring Data JPA et @Requête d'annotation
EDIT: des Solutions à ce problème sont fournis dans la deuxième et la quatrième réponse concernant cette question setMaxResults pour le Printemps-Data-JPA annotation?
Objectif: aller Chercher le plus grand/plus petit élément d'une propriété à z à l'aide d'un Spring Data JPA référentiel et le Ressort de la Requête d'annotation.
Ce que j'ai jusqu'à présent
@Query("SELECT xelement FROM x xelement ORDER BY xelement.z")
public List<X> findFirstElement();
Problème: Cette requête extrait tous les éléments (ce qui n'est pas vraiment efficace). Si je voudrais utiliser l'EntityManager directement, j'ai pu définir le nombre de résultats à l'aide
entityManager.setMaxResults(1)
pour obtenir uniquement le premier élément.
Question: Comment puis-je spécifier le nombre maximum de résultats à l'aide de la @Requête annotation?
Idée: Est à l'aide d'un PageRequest de la taille 0 à l'aller?
Contraintes: je suis conscient de la "FindFirstBy...." fonction de requête, mais je veux/dois utiliser la @Query
annotation.
- Pourquoi est-ce que votre méthode de retour
List<X>
lorsqu'il est prévu qu'à retourner d'un seul élément? Si la requête est vraiment aussi simple que cela, vous pouvez éviter d'utiliser@Query
et tout simplementfindFirstOrderByZ()
. Sinon, vous devrez utiliser leLIMIT
mot-clé pour limiter le nombre d'enregistrements renvoyésSELECT x FROM xelement x ORDER BY x.z LIMIT 1
. - 1. concernant la Liste des<X>, c'était juste pour être suffisamment souple dans le cas où je changerais d'un nombre arbitraire d'éléments, mais oui, en principe, vous avez raison, en retournant une liste est exagéré dans ce cas. 2. Quant à la "findFirst.." --> voir les contraintes. 3. Êtes-vous sûr que la limite de mot-clé est disponible en JPQL? Je suppose que je dois vérifier .... J'ai aussi trouvé stackoverflow.com/questions/9314078/... qui assez bien résout le problème.
- Trouvé ceci pour être couverts par les deuxième et quatrième réponse à [stackoverflow.com/questions/9314078/... [1]: stackoverflow.com/questions/9314078/...
- Double Possible de setMaxResults pour le Printemps-Data-JPA annotation?
- S'il vous plaît ne pas se référer à des réponses par leur ordre dans la liste. Cet ordre change. S'il vous plaît lien directement vers les réponses.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la limite de la propriété de sql par le simple ajout d'nativeQuery à @Requête d'annotation. Cependant, il y a une autre et une meilleure façon de le faire. Paginable classe dans votre référentiel méthode permettra de résoudre votre problème sans toucher à votre @Requête annotation:
Pour définir la limite et de l'offset, l'utilisation doit appeler ce référentiel méthode comme suit:
Ici 1 correspond à la limite que vous voulez.
Essayer de faire ceci:
Le plus proche de l'APC de la syntaxe de la requête, je pense, pour votre cas d'utilisation est
findFirstByZIsNotNullOrderByZAsc
. Cela devrait éliminer le besoin d'écrire personnalisé requête native.