@Override public int removeAll(Filter clause) { logger.debug("invoke removeAll on " + type.getSimpleName()); Session session = getSession(); FilterToHibernateClauseTranslator translator = new FilterToHibernateClauseTranslator(); String hql = translator.translateToHQLDelete(clause, getSessionFactory().getClassMetadata(type)); logger.debug("hql = " + hql); return session.createQuery(hql).executeUpdate(); }
@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(); } }
/* (non-Javadoc) * @see fr.certu.chouette.dao.IDaoTemplate#select(fr.certu.chouette.filter.Filter) */ @SuppressWarnings("unchecked") public List<T> select(final Filter filter) { logger.debug("invoke select on " + type.getSimpleName()); Session session = getSession(); Criteria criteria = session.createCriteria(type); // DetachedCriteria criteria = DetachedCriteria.forClass(type); criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); if (!filter.isEmpty()) { FilterToHibernateClauseTranslator translator = new FilterToHibernateClauseTranslator(); criteria.add( translator.translate(filter, criteria, getSessionFactory().getClassMetadata(type))); } if (filter.getOrderList() != null) { for (FilterOrder order : filter.getOrderList()) { switch (order.getType()) { case ASC: criteria.addOrder(Order.asc(order.getAttribute())); break; case DESC: criteria.addOrder(Order.desc(order.getAttribute())); break; default: break; } } } // HibernateTemplate ht = getHibernateTemplate(); List<T> beans = null; if (filter.getLimit() > 0 || filter.getStart() > 0) { logger.debug("call with start and/or limit"); criteria.setFirstResult(filter.getStart()); criteria.setMaxResults(filter.getLimit()); beans = criteria.list(); // ht.findByCriteria(criteria,filter.getStart(),filter.getLimit()); } else { beans = criteria.list(); // ht.findByCriteria(criteria); } logger.debug(type.getSimpleName() + " founds = " + beans.size()); return beans; }