2012-10-22 103 views
1

加入我需要以下查詢轉換爲冬眠 -休眠:查詢與子查詢

select * from ep_batch eb 
INNER JOIN ep_slide slide ON eb.batch_scanner_id = slide.slide_batch_id 
WHERE eb.batch_scanner_id = 1 AND 
eb.batch_status = 
(
IF((SELECT count(batch_id) as cnt from ep_batch WHERE batch_scanner_id = 1) =1,'Ready','In Progress') 
) ; 

我有「幻燈片」和「批處理」 POJO代表ep_slide和ep_batch RESP。加入註釋爲 -

@OneToMany(mappedBy = "batch") 
    private Set<Slide> slides; 
@ManyToOne 
    @JoinColumn(name = "batchId") 
    private Batch batch; 

我不是很確定如何添加具有條件的子查詢。 我想類似下面 -

DetachedCriteria subCriteria = DetachedCriteria.forClass(Slide.class); 
     subCriteria.setProjection(Projections.count("batchId")); 

回答

0

我沒有執行,但你可以嘗試下面的HQL,適當更換實體屬性。

SELECT b FROM Batch b, Slide s 
WHERE b.batch_scanner_id = s.slide_batch_id AND 
b.batch_status = 
(CASE WHEN ((SELECT COUNT(bt.batch_id) FROM Batch bt WHERE bt.batch_scanner_id = 1) = 1) THEN 'Ready' 
ELSE 'In Progress' 
END);