2013-03-01 72 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