JPQL ne permet pas d'ajouter le limite à la requête générée par le HQL. Vous obtiendrez l'exception suivante.
org.hibernate.hql.internal.ast.QuerySyntaxException : jeton inattendu : LIMIT près de la ligne 1
Mais ne vous inquiétez pas, il existe une alternative pour utiliser le mot-clé limite dans la requête générée par le HQL en utilisant les étapes suivantes.
Sort.by(sortBy).descending() // Récupère les enregistrements par ordre décroissant.
pageSize = 1 // Récupérer le premier enregistrement de l'ensemble des résultats par ordre décroissant.
Référez-vous à la classe de service suivante
Service :
@Autowired
StudentRepository repository;
public List<Student> getLastStudentDetails(Integer pageNo, Integer pageSize, String sortBy)
{
Integer pageNo = 0;
Integer pageSize = 1;
String sortBy = "id";
Pageable paging = PageRequest.of(pageNo, pageSize, Sort.by(sortBy).descending());
Slice<Student> pagedResult = repository.findLastStudent(paging);
return pagedResult.getContent();
}
L'interface de votre dépôt doit implémenter la fonction PagingAndSortingRepository
Dépôt :
public interface StudentRepository extends JpaRepository<Student,Long>, PagingAndSortingRepository<Student,Long>{
@Query("select student from Student student")
Slice<Student> findLastStudent(Pageable paging);
}
Cela ajoutera le mot-clé limite à votre requête, que vous pourrez voir dans la console. J'espère que cela vous aidera.
0 votes
@NeilStockton ok, j'étais un peu confus à ce sujet, maintenant comment utiliser setMaxResults/setFirstResult dans ma requête jpql ci-dessus ?
2 votes
J'ai utilisé ceci qui a également fonctionné pour moi
@Query(value = "SELECT * FROM students ORDER BY id DESC LIMIT 1", nativeQuery = true) Object getLastStudentDetails();
1 votes
Non. Vous n'êtes pas obligé d'utiliser une requête native. Lisez les questions-réponses liées ! !!
1 votes
Duplicata de stackoverflow.com/questions/34640488/ et vérifiez également le guide de référence ou comment écrire méthodes d'interrogation .