Какова альтернатива предложения LIMIT в JPQL?

Я работаю с PostgreSQL-запросом, реализуемым в JPQL.

Это пример собственного запроса psql, который отлично работает,

SELECT * FROM students ORDER BY id DESC LIMIT 1;

тот же запрос в JPQL не работает,

@Query("SELECT s FROM Students s ORDER BY s.id DESC LIMIT 1")

Students getLastStudentDetails();

похоже, что предложение LIMIT не работает в JPQL.

согласно документации JPA мы можем использовать setMaxResults/setFirstResult, может кто-нибудь сказать мне, как я могу использовать это в мой запрос?

3 ответов


вы используете JPQL, который не поддерживает ограничение результатов, как это. При использовании собственного JPQL вы должны использовать setMaxResults чтобы ограничить результаты.

однако вы используете Spring Data JPA, что в основном делает это довольно легко сделать. См.здесь в справочном руководстве, о том, как ограничить результаты, основанные на запросе. В вашем случае, найти способ сделать именно то, что вы хотите.

findFirstByOrderById();

вы также можете использовать


как указано в комментариях, JPQL не поддерживает LIMIT ключевое слово.

вы можете достичь этого, используя setMaxResults но если то, что вы хотите, - это всего лишь один элемент, используйте getSingleResult - Это бросает исключение, если элемент не найден.

Итак, ваш запрос будет что-то вроде:

TypedQuery<Student> query = entityManager.createQuery("SELECT s FROM Students s ORDER BY s.id DESC", Student.class);    
query.setMaxResults(1);

если вы хотите установить определенное начальное смещение, используйте query.setFirstResult(initPosition); too


вы можете использовать что-то вроде этого:

 @Repository
 public interface ICustomerMasterRepository extends CrudRepository<CustomerMaster, String> 
 {
    @Query(value = "SELECT max(c.customer_id) FROM CustomerMaster c ")
    public String getMaxId();
 }