springdate-jpa中的jpql不支持limit的解决方案

前言

项目中有使用springdata-jpa去查询sql的模块。在@query中使用limit函数时,报错。

public interface XxxRepo extends JpaRepository
{
@Query("select xxx1, xxx2, xxx3 from Xxx "
   + "where 条件 order by insert_time desc limit 0, 1")
 public Xxx findLatestOne(String userId, String vin);
}

后来一顿搜索才知道,springdata-jpa的@query中写的sql叫JPQL,jpql是不支持limit函数的。而原生sql是支持limit函数的。那么问题就有解决的思路了,我们使用原生的sql试试看

解决方案

@Query(nativeQuery=true,value = “”) value值是原生sql语句
注意:如果返回的是数据库对应的实体对象,那么sql的返回结果集字段别名中应该与该实体类中对应的数据库字段名一致,可以有多余字段,但不能少字段。
重要的事情说三遍!
sql返回结果集不能少字段
sql返回结果集不能少字段
sql返回结果集不能少字段

@Query(nativeQuery=true, value = "select xxx_1 ,xxx_2, xxx_3 from Xxx "
   + "where 条件 order by insert_time desc limit 0, 1")
 public Xxx findLatestOne(String userId, String vin);
}
总结

加入nativeQuery注解时,写原生sql,支持limit函数
不加入nativeQuery注解时是JPQL。JPQL不支持limit函数

你可能感兴趣的:(#,springdate-jpa)