【问题标题】:JPA @Query, avg of elements with limitJPA @Query,具有限制的元素的平均值
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2013-12-29
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2018-02-18
    相关资源
    最近更新 更多