JPQL使用limit查询

使用数据库当我们只查询一条记录的时候,最好加上在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 方法。