使用Spring Data JPA从MS SQL中选择前1条记录

时间:2018-07-25 17:54:09

标签: java spring-data-jpa

我正在使用下面的@Query批注从MS-SQL获取前几条记录。显示错误,提示“ <操作符>或预期的AS ...”

   @Query("SELECT Top 1 * FROM NEVS010_VEH_ACTV_COMMAND C WHERE C.EVS014_VIN = :vin ORDER BY C.EVS010_CREATE_S DESC")
    CommandStatus findCommandStatusByVinOrderByCreatedTimestampDesc(@Param("vin") String vin);

3 个答案:

答案 0 :(得分:3)

您还可以使用Docs中提到的findFirst和findTop:

findFirstByVinOrderByCreatedTimestampDesc(String vin)

答案 1 :(得分:1)

由于查询是SQL(而不是JPQL),因此需要在注释中设置nativeQuery = true

@Query(nativeQuery = true, value = "SELECT Top 1 * FROM NEVS010_VEH_ACTV_COMMAND C WHERE C.EVS014_VIN = :vin ORDER BY C.EVS010_CREATE_S DESC")
    CommandStatus findCommandStatusByVinOrderByCreatedTimestampDesc(@Param("vin") String vin);

答案 2 :(得分:0)

对于不使用nativeQuery的自定义查询,可以使用字段ROWNUM

Ex(在Kotlin中,但相同的想法在Java中也有效):

@Query("""
    SELECT a 
    FROM Account a 
    WHERE a.bla = :ble
        AND ROWNUM = 1 
    ORDER BY a.modifiedDate DESC 
""")
fun findWhatever(@Param("ble") someParam: String)

到目前为止,我还没有在任何文档上找到它。我刚刚测试过,它适用于Oracle,MySQL和H2