What is the LIMIT clause alternative in JPQL?

前端 未结 7 690
不思量自难忘°
不思量自难忘° 2020-12-13 03:26

I\'m working with PostgreSQL query implementing in JPQL.

This is a sample native psql query which works fine,

SELECT * FROM students ORDER BY id DESC         


        
7条回答
  •  不知归路
    2020-12-13 03:56

    JPQL does not allow to add the limit keyword to the query generated by the HQL. You would get the following exception.

    org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: LIMIT near line 1

    But don't worry there is an alternative to use the limit keyword in the query generated by the HQL by using the following steps.

    Sort.by(sortBy).descending() // fetch the records in descending order

    pageSize = 1 // fetch the first record from the descending order result set.

    Refer the following service class

    Service:

    @Autowired
    StudentRepository repository; 
    
    public List 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 pagedResult = repository.findLastStudent(paging);
    
        return pagedResult.getContent();
    }
    

    Your repository interface should implement the PagingAndSortingRepository

    Repository:

    public interface StudentRepository extends JpaRepository, PagingAndSortingRepository{
    
        @Query("select student from Student student")
        Slice findLastStudent(Pageable paging);
    }
    

    This will add the limit keyword to you query which you can see in the console. Hope this helps.

提交回复
热议问题