【问题标题】:Spring data method name for getting rows having max column value用于获取具有最大列值的行的 Spring 数据方法名称
【发布时间】:2017-08-17 15:02:11
【问题描述】:

这是我的虚拟temp 表中的虚拟数据:

以上,columna 中没有数据,但这只是偶然。我想获得具有

的行
  • columna 中没有数据
  • 具有与输入参数值匹配的columnb
  • 具有columnc 值是该列的最大数值等效项。 (即columnc 的类型为character varying(255),但我知道该单元格中会有integers。所以我只想要那些具有该列的最大整数等效值的行,即上述数据中的1)

查询将如下所示:

SELECT * FROM temp 
WHERE
    columnb = 'ia' 
    AND coalesce(columna, '') = '' 
    AND CAST(coalesce(columnc, '0') AS integer)
        =(
          SELECT MAX(CAST(coalesce(columnc, '0') AS integer)) 
          FROM temp
          WHERE
              columnb = 'ia' 
              AND coalesce(columna, '') = ''
         );

输出如下所示:

Q1. 是否可以通过基于 Spring 数据 JPA 方法名称的查询来完成此操作? (主要是我看到这可能是不可能的,因为我遇到了here)。像这样说:findByColumnbAndColumnaIsNullAnd<Something for filtering on max value of columnc>(String columnaValue)?

Q2.如果columnc是数字类型,是否可以做Q1?

Q3. 原生查询(带有@Query 注释)是在spring-data jpa 中执行此操作的唯一方法吗?

【问题讨论】:

    标签: java spring jpa spring-data spring-data-jpa


    【解决方案1】:

    您链接的帖子已有 3 年历史。

    Q1:不是。你的查询太复杂了,MAX/COALESCEnot supported。您必须编写一个 JPQL 查询。

    第二季度:见第一季度。

    Q3:不,JPQL 是可能的(@Querynative = false)。

    注意:另一种解决方案是执行视图(= 原生查询)和 @Immutable 实体。

    【讨论】:

    • 在第一季度,我说的是方法名称,而不是原生查询。
    • 抱歉,误会了。不,这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多