Why do I get the "unexpected token: LIMIT..." error?
Hibernate doesn't support the LIMIT token in a SELECT statement. Whereas in a Java SQL PreparedStatement to define a limit on the result set you can use the LIMIT command in the SELECT query.
SELECT * FROM person_table as person WHERE last_name = "Miller" LIMIT 0,20;If you use Hibernate instead this command wouldn't work. You would get an error looking like:
"unexpected token: LIMIT near line 1 column..."
How to limit results for paging in a Hibernate query?
The proper way in Hibernate select queries would be to use:
query.setFirstResult(0); query.setMaxResults(20);
Example on how to use paging in Hibernate HQL select query?
Below an example on how to execute a SELECT query with a limit on the returned result set in Hibernate. Especially if you want to use pagination through the results this example how to pass in a page size and page number and get the according results from the table.
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
.
.
.
public List<Person> getPersonsByLastName(String lastName, int pageSize, int pageNum) throws Exception
{
//unless you need only certain columns you don't need to add the SELECT part in the select query (HQL query) in Hibernate
String sqlQuery = "FROM Person as person where person.lastName=:lastName";
Query query = workspace.getReadOnlyDbQuery(sqlQuery);
// Pass all the parameters
query.setParameter("lastName", lastName);
query.setFirstResult(getStartIndex(pageSize, pageNum));
query.setMaxResults(pageSize);
List<Person> result = query.list();
if (result != null && result.size() > 0) {
return result;
} else {
return null;
}
}
public Query getReadOnlyDbQuery(String queryString) throws Exception
{
Session session = getReadOnlyDbSession();
Query query = session.createQuery(queryString);
query.setTimeout(5);
return query;
}
//calculates the start index for pagination
private int getStartIndex(int pageSize, int pageNum) {
if (pageNum < 1)
return 0;
return (pageNum - 1) * pageSize;
}
0 comments:
Post a Comment