当前位置: 首页 > 知识库问答 >
问题:

使用Hibernate条件转换内部查询

张高义
2023-03-14

我正在尝试将下面的嵌套查询转换为Hibernate Criteria,但无法做到。实际上,尝试对结果集中的行进行计数和求和。

有人有什么想法吗?

提前谢谢。

sql prettyprint-override"> SELECT DISTINCT host_platform,
      host_manufacturer,
      COUNT(phy_1),
      COUNT (vir_1),
      SUM (server_cost) AS server_cost,
      SUM (book_value) AS book_value,
      SUM (maintenance_cost) AS main_cost,
      SUM (current_cost) AS curr_cost 
 FROM (SELECT DISTINCT host_platform,
      host_manufacturer,
      phy_1,
      vir_1,
      server_cost,
      book_value,
      maintenance_cost,
      current_cost
         FROM tf_server_list_v
         where host_platform = 'UNIX')
                --ipaddress = '142.125.21.70')
         GROUP BY host_platform, host_manufacturer;

下面是为上述查询编写的标准,

>

  • 对于select main query,

    Criteria mainCriteria = getSession().createCriteria(TfServerListNew.Class);
    
    ProjectionList projOSList1 = Projections.projectionList();
    projOSList1.add(Projections.property("hostPlatform"), "hostPlatform");
    ProjectionList projectionList1 = Projections.projectionList();
    projectionList1.add(Projections.distinct(projOSList));
    projectionList1.add(Projections.alias(Projections.property("hostManufacturer"), "hostManufacturer"));
    projectionList1.add(Projections.alias(Projections.count("physicalFlag"), "physical"));
    projectionList1.add(Projections.alias(Projections.count("virtualFlag"), "virtual"));
    projectionList1.add(Projections.alias(Projections.sum("serverCost"), "serverCost"));
    projectionList1.add(Projections.alias(Projections.sum("bookValue"), "bookValue"));
    projectionList1.add(Projections.alias(Projections.sum("mainCost"), "mainCost"));
    projectionList1.add(Projections.alias(Projections.sum("currCost"), "currCost"));
    
    mainCriteria.setProjection(projectionList1);
    

    对于内部查询填充结果集并传递给主查询,

    final DetachedCriteria criteria = DetachedCriteria.forClass(TfServerListNew.class);
    ProjectionList projOSList = Projections.projectionList();
    projOSList.add(Projections.property("hostPlatform"), "hostPlatform");
    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.distinct(projOSList));
    projectionList.add(Projections.alias(Projections.property("hostManufacturer"), "hostManufacturer"));
    projectionList.add(Projections.alias(Projections.property("physicalFlag"), "physical"));
    projectionList.add(Projections.alias(Projections.property("virtualFlag"), "virtual"));
    projectionList.add(Projections.alias(Projections.property("serverCost"), "serverCost"));
    projectionList.add(Projections.alias(Projections.property("bookValue"), "bookValue"));
    projectionList.add(Projections.alias(Projections.property("mainCost"), "mainCost"));
    projectionList.add(Projections.alias(Projections.property("currCost"), "currCost"));
    

    但如何将这个子查询传递给主查询还不清楚。

  • 共有1个答案

    胡禄
    2023-03-14

    使用

    mainCriteria.add(Restrictions.sqlRestriction("your nested query"));
    

    或者您可以根据需求使用其他版本的sqlRetiction

    我认为这个方法很好。或者由于您没有提供与代码相关的详细信息,因此没有回答。

     类似资料:
    • 我想忽略createAlias中的默认连接限制。我有一段一刀切的关系。 我的问题是Hibernate为连接关系生成默认限制。 波约 注:费用表中没有诊断模板栏。 Charge.java 诊断emplate.java 查询 标准 Hibernate查询 如何避免这种情况?或者我的关系有什么问题? 请帮帮我。。!

    • 我需要将这个sql查询转换为hibernate条件,请大家帮忙。 按名称顺序按应用描述限制3从设备组中选择名称,计数(*)为应用

    • 问题内容: 我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询: 如何使用hibernate条件对象实现它? 问题答案: 您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria API中的以下方法来构造所需的Criteria对象: 使用setProjection(Projection projection)定义select子句 使用creat

    • 问题内容: 我不确定如何描述这个问题,所以我认为举个例子是问我问题的最好方法: 我有两个表具有多对多关系: 驾驶执照<-> LicenceClass LicenceClass是“汽车”,“摩托车”和“中型刚性”之类的东西。 使用Hibernate Criteria,如何找到同时具有“汽车”和“摩托车” LicenceClasses的所有许可证? 2008年12月11日更新我发现可以使用自定义Res

    • 我需要将以下查询转换为hibernate条件查询。请帮忙 由于投票表上的复合主键,我用@Embeddable分隔了主键,所以后面的createQuery不起作用 和可嵌入对象 请建议一个更好的方法。

    • 我想使用Hibernate条件语言编写此查询。我对Hibernate很陌生,无法将此查询转换为条件形式。我参考了很多关于 SO 的答案,但就我而言,我在不同的列上使用内部连接而不是主键/外键列。我提到了这个,但仍然不能正确。