【问题标题】:How to write the following MYSQL query in criteria query and hibernate query?如何在条件查询和休眠查询中编写以下MYSQL查询?
【发布时间】:2014-06-23 02:07:30
【问题描述】:

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

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

任何建议。

【问题讨论】:

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


    【解决方案1】:
    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);
    

    【讨论】:

    • 谢谢,我们如何在条件查询中做到这一点。
    • 我不知道我们是否可以在条件中编写这样的查询
    • 不可能吗?
    【解决方案2】:

    据我了解,在阅读文档并查看示例后,您不需要子查询来做您想做的事情。

    基本上你编写 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 的手册部分。

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2012-01-26
      • 2011-06-08
      • 2020-04-13
      相关资源
      最近更新 更多