2017-03-22 70 views
5

问题很简单,可以使用Criteria或DetachedCriteria在Hibernate中完成此查询吗?我想不是,但我想做这个问题也许存在一个解决方法。这个查询是可能使用Criteria或DetachedCriteria休眠

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克拉克的答案正确的,但另一个问题出现了如下

where can i find the findByCriteria from SessionFactory we are not using Spring 

回答

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(); 

您尝试识别的对象是否具有相同的“SOMECONDITIONS”?如果是这样,这将在功能上完成你要找的东西:

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); 
+0

我在哪里可以找到来自SessionFactory的findByCriteria我们没有使用Spring – chiperortiz