2013-03-01 31 views
2

我有一個關於在Hibernate中使用限制的問題。休眠標準。限制和最大日期

我要創建標準,設置一些限制,然後選擇一個紀錄日期字段的最大值:

Criteria query = session.createCriteria(Storage.class) 
      query.add(Restrictions.eq(USER_ID, item.getUserId())); 
      query.add(Restrictions.eq(ITEM_ID, item.getItemId())); 
      query.add(Restrictions.lt(PURCHASE_DATE, item.getDate())); 
      query.setProjection(Projections.max(PURCHASE_DATE)); 
      return query.uniqueResult(); 

我明白,預測將不會返回我的紀錄,最大日期。 我應該選擇什麼方法?

也許我可以添加訂單到我的查詢(日期字段升序),然後選擇第一個結果?

或者您能否提出更優雅的解決方案?

謝謝!

回答

5

你的情況,你可以去

A)與DetachedQuery。例如,

DetachedCriteria maxQuery = DetachedCriteria.forClass(Storage.class); 
maxQuery.add(Restrictions.eq(USER_ID, item.getUserId())); 
maxQuery.add(Restrictions.eq(ITEM_ID, item.getItemId())); 
maxQuery.add(Restrictions.lt(PURCHASE_DATE, item.getDate())); 
maxQuery.setProjection(Projections.max("PURCHASE_DATE")); 

Criteria query = getSession().createCriteria(Storage.class); 
query.add(Restrictions.eq(USER_ID, item.getUserId())); 
query.add(Restrictions.eq(ITEM_ID, item.getItemId())); 
query.add(Property.forName("PURCHASE_DATE").eq(maxQuery)); 

在處理分離的查詢時記住交易!與HQL或SQL直接,以做子選擇http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

B):更多詳細信息,文件上脫落查詢

參見第15章。

有關HQL的更多詳細信息,請參閱Hibernate文檔的第14章:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html