To exactly match the query, you really need to do this with two steps, but I would avoid this if it was possible:
final Criteria innerCriteria = getSession().createCriteria(YourEntity.class); // SOME CONDITIONS innerCriteria.add(Restrictions.eq("someColumn", "someValue")); innerCriteria.addOrder(Order.desc("timestamp")); innerCriteria.setMaxResults(15); innerCriteria.setProjection(Projections.id()); List<YourIdClass> ids = innerCriteria.list(); final Criteria criteria = getSession().createCriteria(YourEntity.class); criteria.add(Restrictions.not(Restrictions.in("id", ids))); List<YourEntity> results = criteria.list();
Will the objects you are trying to identify have the same "SOMECONDITIONS"? If so, it will functionally fulfill what you are looking for:
final DetachedCriteria criteria = DetachedCriteria.forClass(YourEntity.class); // SOME CONDITIONS criteria.add(Restrictions.eq("someColumn", "someValue")); criteria.addOrder(Order.desc("timestamp")); getHibernateTemplate().findByCriteria(criteria, 16, 9999999);
source share