Какова альтернатива предложения 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();
}