簡體   English   中英

使用休眠條件轉換內部查詢

[英]converting inner query using Hibernate Criteria

我正在嘗試將下面的嵌套查詢轉換為Hibernate Criteria,但無法執行。 實際上,嘗試對結果集中的行進行計數和求和。

那么有人有什么想法嗎?

提前致謝。

 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;

以下是為上述查詢編寫的條件,

  1. 對於選擇主查詢,

     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); 
  2. 為了讓內部查詢填充結果集並傳遞給主查詢,

     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")); 

但是如何傳遞這個子查詢到主查詢卻沒有。

采用

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

或者您可以根據需要使用其他版本的sqlRestriction

我認為這種方法不錯。或者由於您沒有提供詳細信息,所以沒有與您的代碼相關的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM