我有一个包含列 id
、 seq_id
、 tran_date
的表格。
示例数据:
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
my expected result is
1 | 2 | 2016-11-02
Condition:
tran_date
should be less than today (2016-11-08) and max(seq_id) record should be listed.
how to implement the Hibernate Query using criteria api to the above?
Real time MySQL query using now is as below, need to convert the same into Hibernate Criteria:
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`)
最佳答案
您可以使用 Hibernate Criteria
使您的 sql 查询等效。
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;
}
}
关于MySQL 查询 Hibernate Criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40480796/