2013-07-12 60 views
0

標準我必須寫HQL查詢:簡單的HQL查詢,並在Hibernate中

FROM Sending adp WHERE adp.id = (SELECT MAX (adpw.id) FROM Sending adpw WHERE adpw.place = adp.place) 

我必須使用標準的API,我不能管理它。查詢返回來自數據庫中所有地方的最後發送,它工作得很好,但現在我必須將其轉換爲Criteria。我管理的唯一一件事是用下面的代碼展示一個地方:

Criteria criteria = getSession().createCriteria(
        Sending.class); 
criteria.setFetchMode("place", FetchMode.JOIN); 
DetachedCriteria maxId = DetachedCriteria.forClass(Sending.class).setProjection(Projections.max("id")); 
criteria.add(Property.forName("id").eq(maxId)); 

你能幫我嗎?提前致謝!!

+0

您顯示的標準代碼有什麼問題?它不起作用?它給出了錯誤的結果? – mthmulders

+0

我只收到一個結果。唯一的一個最大ID - 一個最大ID的發送。它必須返回超過350 - 從每個地方最後發送。 –

回答

0

對不起回答我自己的問題,但我找到了解決方案。

我忘記了子查詢可以與自己相關聯。我意識到我的查詢用下面的代碼:

Criteria criteria = getSession().createCriteria(Sending.class); 
DetachedCriteria dc = DetachedCriteria.forClass(Sending.class, "adpw"); 
dc.add(Restrictions.eqProperty("adpw.place", "adp.place")); 
dc.setProjection(Projections.max("id")); 
criteria.add(Property.forName("id").eq(dc)); 
criteria.setMaxResults(count).setFirstResult(start); 
return criteria.list(); 

一切工作現在很好。