意外的令牌:DISTINCT Spring Data

问题描述 投票:0回答:1
@Query("SELECT EXTRACT(MONTH FROM e.estimateDate) AS MONTH, " +
            "EXTRACT(YEAR FROM e.estimateDate) AS YEAR, " +
            "e.status.id, " +
            "ROUND((SUM((i.squareFeet*i.depth)*i.price)-SUM(DISTINCT e.discount)), 2) AS TOTAL " +
            "FROM Estimate e " +
            "INNER JOIN Item i " +
            "ON i.estimate.id = e.id " +
            "WHERE e.seller.id = :sellerId " +
            "AND EXTRACT(YEAR FROM e.estimateDate) = :year " +
            "GROUP BY MONTH, YEAR, e.status.id " +
            "ORDER BY EXTRACT(YEAR FROM e.estimateDate), EXTRACT(MONTH FROM e.estimateDate) DESC ")

错误:

unexpected token: DISTINCT

错误出现在 SUM(DISTINCT e.discount) 上。我删除了不同的和有效的,但值是错误的。我在控制台上复制了 sql 并直接使用数据库,一切正常。

java spring jpa spring-data jpql
1个回答
0
投票

我记得 Spring Data 查询中默认使用 JPQL。因此,如果您想执行一些在数据库中工作的特定 SQL 结构 - 在查询注释中设置“nativeQuery”参数。

@Query(sql = "", nativeQuery = true)

但请注意,不同数据库的 SQL 方言可能有所不同。它可能不适用于其他数据库。考虑重写查询以适应 JPQL。

© www.soinside.com 2019 - 2024. All rights reserved.