2016-11-08 162 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
我希望你现在能理解 –