在使用Spring Data JPA的查询中是否可以使用列名作为参数?

问题描述 投票:1回答:2

我正在编写一个用于NBA数据数据可视化的应用程序。我正在使用Spring Boot + MySql数据库。我试图从每列中找到smallestlargest值,条件是玩家必须玩至少10场比赛。为此,我可以编写如下方法:

@Repository
public interface PerGameStatsRepository extends JpaRepository<PerGameStats, PerGameStatsId> {

@Query(value = "SELECT MAX(stats.pts) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
        BigDecimal findMaxAmountOfPoints();

@Query(value = "SELECT MIN(stats.pts) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
        BigDecimal findMinAmountOfPoints();
}

但是,该表有大约15列,例如得分,篮板,助攻,盖帽等(可能还会添加更多列)。为了获得每个值的最小值和最大值,我必须为每列编写2种方法:2x15 = 30 total。有没有一种方法可以避免这种重复,并编写一种以列名作为参数并基于该方法执行正确查询的方法?类似于:

// this obviously doesn't work
@Query(value = "SELECT MAX(stats.:#{#fieldName}) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
BigDecimal findMaxAmountOfField(String fieldName);
java spring-data-jpa spring-data
2个回答
-1
投票

您可以使用Projection:

interface MinMaxProjection {

    BigDecimal getMin();
    BigDecimal getMax();

}

然后您的存储库应如下所示:

@Query(value = "SELECT MIN(stats.pts) as min, MAX(stats.pts) as max FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
        MinMaxProjection findMinMaxAmountOfPoints();
}

然后您的回复应该是:

{
max: 460,
min: 200,
}
© www.soinside.com 2019 - 2024. All rights reserved.