Printemps de Données - Pourquoi il n'est pas possible d'avoir la pagination natif de la requête
Disons que nous avons une entité appelée MyEntity
. Il est possible d'interroger paginable résultats à l'aide @Query
et avec des requêtes nommées, par exemple
@Query(value = "select e from MyEntity e where e.enabled = true")
Page<MyEntity> findAllEnabled(Pageable pageable);
Cependant, il n'est pas possible d'atteindre le même natif de la requête, de sorte que cette
@Query(value = "select * from my_entity where enabled = true", nativeQuery = true)
Page<MyEntity> findAllEnabled(Pageable pageable);
ne fonctionne pas.
Quelles sont les raisons derrière tout cela? Est-il possible de faire Paginable de travail avec les autochtones de requêtes?
En fait, c'est possible. Regardez ici (Printemps des Données et la Requête Native avec la pagination) pour une solution.
OriginalL'auteur vtor | 2015-02-15
Vous devez vous connecter pour publier un commentaire.
C'est la description, donnée au printemps de données jpa documentation (http://docs.spring.io/spring-data/jpa/docs/1.8.0.M1/reference/html/)
JPQL résumés SQL de mise en œuvre et les fournisseurs de détails, et il est de la responsabilité de l'ORM cadre de générer SQL correcte.
En utilisant la Pagination en JPQL forme, le Printemps a juste besoin de générer corriger JPQL, et il sera interprété sur ORM niveau de SQL correcte.
En faisant de la sorte avec SQL, impliquerait que le Printemps sait généré SQL correcte pour la grande majorité des SGBDR, la duplication d'ORM fonctionnalité, ce qui est trop de frais généraux.
OriginalL'auteur mavarazy
Je ne sais pas si c'est encore pertinent pour vous: Au moins dans Spring Data JPA 1.9.4 vous pouvez spécifier deux requêtes.
Donné un référentiel:
Vous pouvez ajouter 2 natif des requêtes à votre entité, l'un pour la requête elle-même et une pour le comte de déclaration:
L'astuce consiste à spécifier le nombre de requête avec le suffixe
.count
. Cela fonctionne également avec les Données du Printemps@Query
annotation.Avis que vous avez besoin d'un SQL ensemble de résultats de la cartographie pour le compte de la requête, si.
Cela fonctionne effectivement très bien.
Merci pour la réponse, il a résolu mon défi.
OriginalL'auteur Michael Simons
Il y a un moyen d'utiliser Paginable natif de requêtes avec le SpEL capacité de Printemps de données, il est fait mention ici.
Vous pouvez trouver un exemple dans ce référentiel.
Le tri fonctionnalité ne fonctionnera pas correctement si il y a une sous-requête dans la
from
clause ou natives de votre requête et que vous souhaitez appliquer une dynamique de tri. La façon dont il peut être fait est de se déplacer à la sous-requête dans lawhere
clause.Printemps de données s'ajoute à la fin de votre demande
" order by "
si il y a unSort
objet dans lePageable
. (avec le Printemps des données 1.10.3)Une meilleure façon est de convertir les indigènes requête jpql si possible.
OriginalL'auteur Stephane L