获取具有最大列值的行的Spring数据方法名称

时间:2017-08-17 15:02:12

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

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

enter image description here

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

  • columna
  • 中没有数据
  • 具有columnb值匹配输入参数值
  • columnc值为该列的最大数字等效值。 (columnc的类型为character varying(255),但我知道该单元格中会有integer个。所以我只想要那些列具有最大整数等值的行,即上述数据中的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, '') = ''
         );

输出如下:

enter image description here

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

Q2。如果columnc是数字类型,是否可以执行Q1?

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

1 个答案:

答案 0 :(得分:0)

The post you linked is 3 years old.

Q1: It's not. Your query is too complicated and MAX/COALESCE are not supported。您必须编写JPQL查询。

Q2:见Q1。

问题3:不,可以使用JPQL(@Query native = false)。

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