【问题标题】:Hibernate criteria for finding count for distinct value用于查找不同值计数的休眠标准
【发布时间】:2014-04-05 13:27:45
【问题描述】:

我有如下sql查询,需要获取对应的hibernate条件查询

SELECT COUNT(DISTINCT employee_id) FROM erp_hr_payment WHERE payment_id IN(
SELECT payment_id FROM erp_hr_payment_collection WHERE payment_id IN(
SELECT payment_id FROM erp_hr_payment_collection WHERE payment_id IN(
SELECT payment_id FROM erp_hr_payment
 WHERE for_month BETWEEN '2013-04-01' AND '2014-03-31' AND arrear_flag=0
) AND element_name='EPF' ) AND element_name='EPFV');

【问题讨论】:

  • 有趣的查询是......

标签: hibernate


【解决方案1】:

从大多数内部查询开始创建相对DetachedCriteria 并使用Subqueries.in() 附加到外部查询。
对于count(distinct),请使用Projections.countDistinct(propertyName)。 享受吧。

【讨论】:

    【解决方案2】:
    • 创建分离标准。每个内部查询一个。
    • 将分离的标准放在主要标准的“in”子句中
    • 使用 countDistinct 投影来获得不同的员工数量

      DetachedCriteria erp_hr_paymentDetachedCriteria = DetachedCriteria.forClass(Erp_hr_payment.class,"erp_hr_payment");
      erp_hr_paymentDetachedCriteria.setProjection(Property.forName("payment_id"));
      
      Criteria erp_hr_paymentMainCriteria = session.createCriteria(erp_hr_payment.class, "pogHeader");
      erp_hr_paymentMainCriteria.setProjection(Projections.projectionList().add(Projections.alias(Projections.countDistinct("erp_hr_payment.employee_id"), "distinctEmployeeCount")));
      erp_hr_paymentMainCriteria.add(Property.forName("erp_hr_payment.payment_id").in(erp_hr_paymentDetachedCriteria));
      erp_hr_paymentDetachedCriteria.list(); //Will give you your result
      

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2018-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多