Author: tchemit Date: 2013-12-18 17:40:25 +0100 (Wed, 18 Dec 2013) New Revision: 2934 Url: http://nuiton.org/projects/topia/repository/revisions/2934 Log: fixes #2971: Add some methods to use pager in TopiaDao and query builder Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java 2013-12-18 16:22:42 UTC (rev 2933) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java 2013-12-18 16:40:25 UTC (rev 2934) @@ -188,6 +188,11 @@ public TopiaPagerBean newPager(String hql, Map<String, Object> params, int pageSize) { TopiaPagerBean pager = new TopiaPagerBean(); + if (hqlContainsOrderBy(hql)) { + + // must remove the order by clause, otherwise some sql queries won't work. + hql = hql.substring(0, hql.toLowerCase().indexOf("order by")); + } long count = count("SELECT COUNT(*) " + hql, params); pager.setRecords(count); pager.setPageSize(pageSize); @@ -504,10 +509,13 @@ Preconditions.checkNotNull(hqlParameters); Preconditions.checkNotNull(pager); - boolean orderByClausePresent = hqlContainsOrderBy(hql); - Preconditions.checkState(!orderByClausePresent, "An 'order by' clause was already found in hql, can't use the order of the pager"); + if (StringUtils.isNotBlank(pager.getSortColumn())) { - if (StringUtils.isNotBlank(pager.getSortColumn())) { + // can't have a order by clause in hql query + Preconditions.checkState( + !hqlContainsOrderBy(hql), + "An 'order by' clause was already found in hql, can't use the order of the pager"); + hql += " order by " + pager.getSortColumn(); if (!pager.isSortAscendant()) { hql += " desc";