@Override public long count(Filter clause) { if (clause == null) clause = Filter.getNewEmptyFilter(); Session session = getSession(); FilterToHibernateClauseTranslator translator = new FilterToHibernateClauseTranslator(); String hql = translator.translateToHQLCount(clause, getSessionFactory().getClassMetadata(type)); logger.debug("hql = " + hql); if (translator.getValues().isEmpty()) return ((Long) session.createQuery(hql).uniqueResult()).longValue(); else { Query query = session.createQuery(hql); int pos = 0; for (Object value : translator.getValues()) { query.setParameter(pos++, value); } return ((Long) query.uniqueResult()).longValue(); } }