如何在条件查询和hibernate查询中编写以下MYSQL查询?

时间:2014-05-06 12:42:20

标签: spring hibernate criteria criteria-api hibernate-criteria

如何为以下MySQL查询编写条件查询和hibernate查询

SELECT * FROM (SELECT * FROM outdatadetail where algorithmno="a0025_d2" and stringno=01 ORDER BY testid desc) sub_query GROUP BY subjectid;

任何建议。

2 个答案:

答案 0 :(得分:0)

String sql = "SELECT * FROM (SELECT * FROM outdatadetail where algorithmno='a0025_d2' and stringno=01 ORDER BY testid desc) sub_query GROUP BY subjectid;";
Session session = getSession().getSessionFactory().getCurrentSession(); 
Query query = session.createSQLQuery(sql);

答案 1 :(得分:0)

据我所知,在阅读文档并查看示例后,您不需要子查询来执行您尝试的操作。

基本上你写了1个查询并设置了一个投影来进行分组。

Criteria query = currentSession.createCriteria(OutDataDetail.class);
query.setProjection(Projections.groupProperty("subjectid").as("subjectid"));
query.add(Restrictions.eq("algorithmno", "a0025_d2"));
query.add(Restrictions.eq("stringno", "01"));
query.addOrder(Order.desc("testid"));
return query.list();

Criteria API本身非常有用。但是当你开始使用ProjectionSubqueriesOrder等类与Criteria一起使用时,它的真正力量就来了。

如果您想将Criteria API与子查询一起使用,您可以执行以下操作:

DetachedCriteria subquery = currentSession.createCriteria(OutDataDetail.class);
subquery.add(Restrictions.eq("algorithmno", "a0025_d2"));
subquery.add(Restrictions.eq("stringno", "01"));
subquery.addOrder(Order.desc("testid"));

Criteria query = currentSession.createCriteria(OutDataDetail.class);
query.setProjection(Projections.groupProperty("subjectid").as("subjectid"));
query.add(Subqueries.exists(subquery);

return query.list();

两个实现都应返回OutDataDetail个对象的列表(假设您正在使用的对象)。

免责声明:我没有尝试过这些。可能这对你不起作用。这个答案是基于我以前使用Criteria API及其相关类的知识和Hibernate 4.1手册编写的。您可以在预览和分组here上看到手册部分。