问题很简单,可以使用Criteria或DetachedCriteria在Hibernate中完成此查询吗?我猜不是,但我想做这个问题可能存在一种解决方法。
SELECT
COLUMNS
FROM table
WHERE id not in (
SELECT * FROM (
SELECT id
FROM table
WHERE
SOMECONDITIONS
ORDER BY timestamp desc limit 0, 15
)
as t);
我会将@Dean Clark的答案标记为正确,但另一个问题是以下
where can i find the findByCriteria from SessionFactory we are not using Spring
答案 0 :(得分:6)
为了与您的查询完全匹配,您确实需要执行2个步骤,但如果可能的话我会避免这种情况:
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();
您尝试识别的对象是否具有相同的&#34; SOMECONDITIONS&#34;?如果是这样,这将在功能上完成您正在寻找的内容:
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);