【发布时间】:2016-02-11 19:58:36
【问题描述】:
有人知道如何转换 postgresql 查询
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))
使用@Query 注解进行 JPA 查询?
现在我有些乱七八糟,但工作一团糟:
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 查询不支持 limit 之类的内容。
有人知道如何改进或优化此代码吗?我的意思是 JPA 为我而不是这个类做这件事的方式,而不是让我的 java 代码更优化。
【问题讨论】:
-
JPQL 没有提供指定子查询中行数限制的方法。
-
上面我写了“我读到 JPA 查询不支持限制之类的东西。”但无论如何感谢您的回复:)
-
JPA 查询确实支持限制......只是不支持 SUBQUERY ......正如我上面写的那样
-
对不起,我的错误。你是对的。
标签: java hibernate postgresql jpa