如何为以下MySQL查询编写条件查询和hibernate查询
SELECT * FROM (SELECT * FROM outdatadetail where algorithmno="a0025_d2" and stringno=01 ORDER BY testid desc) sub_query GROUP BY subjectid;
任何建议。
答案 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本身非常有用。但是当你开始使用Projection
,Subqueries
,Order
等类与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上看到手册部分。