2016-11-08 161 views
0

我有一個表id,seq_id,tran_dateMySQL查詢到休眠標準

樣本數據:

 
id  | seq_id | tran_date 
------ | ------ -------- 
1  | 1  | 2016-11-01 
1  | 2  | 2016-11-01 
1  | 1  | 2016-11-02 
1  | 2  | 2016-11-02 
1  | 1  | 2016-11-12 
1  | 2  | 2016-11-12 

我預期的結果是

 
1  | 2  | 2016-11-02 

條件

tran_date應小於今日(2016年11月8日)和max (seq_id)記錄應該列出。

如何使用標準api實現Hibernate查詢以上?

實時現在使用MySQL查詢是如下,需要將其轉換成休眠標準:

SELECT * 
    FROM testtable tt 
    WHERE CONCAT(DATE_FORMAT(tt.tran_date, '%Y%m%d'), LPAD(tt.seq_id , 2, '0')) = 
    (SELECT MAX(CONCAT(DATE_FORMAT(mtv1.tran_date, '%Y%m%d'), LPAD(mtv1.seq_id , 2, '0'))) 
    FROM testtable tt1 WHERE tt1.`Label_Id` = tt1.`id` 
    AND mtv1.tran_date<= CURRENT_DATE() GROUP BY mtv.`id`) 
+0

有兩列max(seq_id)。你想要哪一個?最大tran_date? –

+0

好吧,我意識到你的SQL,看到 –

回答

0

你可以讓你的SQL查詢的等效採用Hibernate Criteria

public YourClassName getResult() throws ParseException { 
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2016-11-08"); 
    Criteria criteria = session.createCriteria(YourClassName.class); 
    criteria.add(Restrictions.lt("tran_date", date)); 
    ProjectionList projectionList = Projections.projectionList(); 
    projectionList.add(Projections.max("id"), "id"); 
    projectionList.add(Projections.max("seq_id"), "seq_id"); 
    projectionList.add(Projections.max("tran_date"), "tran_date"); 
    criteria.setProjection(projectionList); 
    criteria.setResultTransformer(new AliasToBeanResultTransformer(YourClassName.class)); 
    if (criteria.list().isEmpty()) { 
     return null; 
    } else { 
     YourClassName yourClassName = (YourClassName) criteria.list().get(0); 
     return yourClassName; 
    } 
} 
+0

表有更多的列,如果我應用組ID按表上我應該得到最大(trans_date,序列)記錄..上述哪裏將取3最大值記錄。在上面提到的SQL查詢中,我提到*表示基於三個條件的所有列1)max(trans_date,sequence)2)trans_date <= current_date()。 3)按ID分組。 –

+0

所有記錄ID是1? –

+0

它因實例而異:

 id | seq_id | tran_date ------ | ------ -------- 1 | 1 | 2016-11-02 1 | 2 | 2016-11-02 1 | 1 | 2016-11-12 1 | 2 | 2016-11-12 2 | 1 | 2016-11-01 2 | 2 | 2016-11-01 2 | 1 | 2016-11-02 2 | 2 | 2016-11-02 3 | 1 | 2016-11-12 3 | 2 | 2016-11-12
我希望你現在能理解 –