JPQL使用limit查询
0
使用数据库当我们只查询一条记录的时候,最好加上在SQL上面limit
或者top
等等语句提高效率,但是使用JPA的JPQL的时候加上limit 1
就会抛出:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: limit near line 1, column 77 [select member from xx.Member member where email = :email limit 1]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
我们可以使用getSingleResult
方法来解决(虽然没看源码,但是据我分析,这个方法应该是不能够提高效率的,因为多个结果时也会抛异常,所以查询结果因该不会只有一个),但是没有找到时却会抛出异常,当然我们可以使用try-catch
来解决:
try {
...
} catch (NoResultException e) {
return null;
}
但是我个人不喜欢用try-catch
来控制流程。
所以还有一种解决办法,就是使用setMaxResults
方法。