【问题标题】:Hibernate Criteria. Restrictions and max Date休眠标准。限制和最大日期
【发布时间】:2013-02-16 11:17:05
【问题描述】:

我有一个关于在 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();

我了解 Projections 不会返回给我最大日期的记录。 我应该选择什么方法?

也许我可以在查询中添加顺序(日期字段的升序),然后选择第一个结果?

或者你能建议更优雅的解决方案吗?

谢谢!

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    在你的情况下,你可以去

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

    在处理分离查询时牢记事务!

    有关分离查询的更多详细信息,请参阅文档的第 15 章:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

    B) 直接使用 HQL 或 SQL,以便进行子选择。

    有关 HQL 的更多详细信息,请参阅 Hibernate 文档的第 14 章:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多