Hibernate 用于查找不同值的计数的休眠条件

Hibernate 用于查找不同值的计数的休眠条件,hibernate,Hibernate,我有下面的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( S

我有下面的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');

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

  • 创建分离的条件。每个内部查询一个
  • 在主标准的“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
    

有趣的查询…我无法使用您的代码段,因为DetachedCriteria没有提供方法
list()
-另请参见