2014-03-04 44 views
1

我有以下SQL查詢,我需要得到相應的Hibernate條件查詢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'); 
+0

搞笑查詢這是... –

回答

5

從最內層查詢開始建立相對DetachedCriteria使用Subqueries.in()連接到外部查詢。
對於count(distinct)使用Projections.countDistinct(propertyName)。 享受。

1
  • 創建分離條件。一個用於每個內部查詢。在「中」爲主要標準
  • 使用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 
    
+0

我不是能夠使用你的代碼片段,因爲DetachedCriteria沒有提供list()方法 - 另請參閱https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/criterion/DetachedCriteria.html –