2017-03-22 15 views
5

Câu hỏi đơn giản có thể truy vấn này được thực hiện trong Hibernate sử dụng Tiêu chí hoặc Tiêu chí tách rời? tôi đoán không nhưng tôi muốn làm câu hỏi này có thể tồn tại một workaround.Truy vấn này có thể sử dụng Tiêu chí hoặc 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); 

Tôi sẽ đánh dấu câu trả lời bằng cách @Dean Clark là đúng nhưng câu hỏi khác được đặt ra là sau

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

Trả lời

6

Để chính xác phù hợp bạn truy vấn, bạn thực sự cần phải làm điều đó với 2 bước, nhưng tôi 'd tránh điều này nếu có thể:

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

Các đối tượng bạn đang cố gắng xác định có cùng "SOMECONDITIONS" không? Nếu có, điều này sẽ thực hiện chức năng những gì bạn đang tìm kiếm:

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

nơi tôi có thể tìm thấy các tiêu chí findByCriteria từ SessionFactory mà chúng tôi không sử dụng Spring – chiperortiz

Các vấn đề liên quan