【问题标题】:how to get Reusable Hibernate Criteria.?如何获得可重用的休眠标准。?
【发布时间】:2010-09-06 09:40:17
【问题描述】:

如何克隆标准对象?

我创建了用于连接多个表和应用多个限制的 Criteria 对象。然后我需要基于应用的限制的记录总数。然后我需要应用分页详细信息(通过设置 maxList)并且必须检索对象列表。

    Criteria criteria = session.createCriteria(Property.class, "property")
                    .createAlias("property.propertyType", "type").createAlias(
                            "property.propertyConcern", "propertyConcern",
                            CriteriaSpecification.LEFT_JOIN).createAlias(
                            "propertyConcern.concern", "concern",
                            CriteriaSpecification.LEFT_JOIN).setResultTransformer(
                            CriteriaSpecification.DISTINCT_ROOT_ENTITY);


criteria = addMultipleSeachCriteria(criteria, condition);
    criteria.setFirstResult(
                        pageCriteria.getFirstRecordOfCurrentPage())
                        .setMaxResults(pageCriteria.getRecordsPerPage());

criteria.addOrder(pageCriteria.isSortDescending() ? Order
                            .desc(pageCriteria.getSortBy()) : Order
                            .asc(pageCriteria.getSortBy()));

当我运行它时,我得到了预期的结果。但是我需要在不应用 order by 和 setmaxResults 的情况下获取应用限制的记录数。我该如何实现?我也无法克隆标准对象..

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    这是通过重置投影结果来实现的,

    pageCriteria.setTotalRecords(((Integer) criteria
                                .setProjection(Projections.rowCount())
                                .uniqueResult()).intValue());
    //Reset
    criteria.setProjection(null);
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    

    但我不确定它在任何其他情况下是否会失败。

    【讨论】:

      【解决方案2】:

      以下是我在 NHibernate 中的操作方式

      DetachedCriteria newCriteria = CriteriaTransformer.TransformToRowCount(criteria);
      

      如果您想添加一些其他信息,例如 SUM,您可以添加具有如下预测的信息:

      newCriteria.SetProjection(Projections.ProjectionList()
                                               .Add(Projections.RowCount(), "rows")
                                               .Add(Projections.Sum("TaxAmount.Decimal"))
                                               .Add(Projections.Sum("NetAmount.Decimal"))
                                               .Add(Projections.Sum("GrossAmount.Decimal")));
      

      【讨论】:

      • 您好,感谢您的回复。它是哪个版本的 Hibernate?我无法在我的代码中获取 CriteriaTransformer 类。它显示错误。请帮助。
      • 我想要休眠解决方案。看来,你为 nHibernate 发布了
      • 对不起,因为它是一个端口,我希望 Hibernate 也存在相同的端口,但它似乎没有。
      猜你喜欢
      • 2011-10-09
      • 2012-12-24
      • 1970-01-01
      • 2012-05-06
      • 2021-10-19
      • 2011-08-13
      • 2011-04-11
      相关资源
      最近更新 更多