2016-02-11 62 views
1

有任何人知道如何PostgreSQL的查詢JPA @Query,平均有限制元素的

select avg(stock.price) from stock where (stock.name = 'some_name' and stock.date in (select stock.date from stock where stock.name = 'some_name' limit 10)) 

轉換爲JPA查詢與@Query註解?

現在我有一些混亂,但混亂的工作:

public Double countStocksAvgToDateAndDaysAmount(String stockName, String date, Integer days) { 
     List<StockEntity> stocksByNameTillDate = stockRepository.getStocksByNameTillDates(stockName, 
       java.sql.Date.valueOf(date)); 
     Integer countDays = 0; 
     Double sum = 0.0; 
     Double avg = 0.0; 
     for (StockEntity stock : stocksByNameTillDate) { 
      countDays++; 
      sum += stock.getPrice(); 
      if (countDays >= days) { 
       break; 
      } 
     } 
     avg = sum/countDays; 
     return avg; 
    } 

其中函數stockRepository.getStocksByNameTillDates()使用@Query

@Query("select stock from StockEntity stock where ((stock.name like :name) and (stock.date <= :date))") 
    public List<StockEntity> getStocksByNameTillDates(@Param("name") String name,@Param("date") Date date); 

我認爲這是一個小(或更糟,多於少許)次優。 我讀了JPA查詢不支持類似限制

有沒有人知道如何改進或使這個代碼更優化?我的意思是JPA爲我而不是這個類做這件事的方式,而不是使我的java代碼更優化。

+0

JPQL不提供指定子查詢中行數限制的方法。 –

+0

以上我寫了 「我讀過JPA查詢不支持類似限制的東西。」 但無論如何回覆:) – solejnik

+0

JPA查詢是否支持限制...只是不在SUBQUERY ...正如我上面寫的 –

回答

-1

這可能有助於您使用jpa查詢獲得10行。

String hql = "SELECT avg(stock.price) from Stock stock where (stock.name = :stockName and stock.date in (select stock.date from stock where stock.name = :stockName))"; 
Query query = session.createQuery(hql); 
query.setParameter("stockName", "stockName"); 
List results = query.list(); 

// If you want to fetch only 10 rows then 
query.setMaxResults(10); //it takes only an integer parameter