spring jpa数据原生Sql查询出现问题

Posted

技术标签:

【中文标题】spring jpa数据原生Sql查询出现问题【英文标题】:Trouble with spring jpa data native Sql query 【发布时间】:2016-09-30 00:58:21 【问题描述】:

我所有的存储库都在扩展 commonService Repository,而后者又扩展了 JpaRepository 和 JpaSpecification

public interface CommonReadRepository<T>
        extends JpaRepository<T, Long>, JpaSpecificationExecutor<T> 

我想在 CommonReadRepository 中定义原生 Sql 查询,例如: mysql:select * from table limit 1,20;

@Query(value = "select * from ?1 limit ?2,?3", nativeQuery = true)

 List<?> customFindQuery(String tableName,int offset,int limit);

但我收到了 SqlGrammerException,不幸的是,我在文档中没有找到太多关于语法的信息。

我知道我是否可以在存储库中定义查询,然后我知道表名,但是否可以使其通用?

谢谢

【问题讨论】:

也许如果您发布完整的堆栈跟踪,那么会有更多信息可以实际评论。更像是一个 MySQL 异常... 【参考方案1】:

在 Spring 数据中定义的 Base Repository Section reference

遵循参考文献中定义的指南,如下所示:

@NoRepositoryBean
interface CommonReadRepository<T, ID extends Serializable> extends JpaRepository<T, ID> 

  List<T> custonFindQuery();

@Repository
interface UserRepository extends CommonReadRepository<User, Long> 
  User findByEmailAddress(EmailAddress emailAddress);

对于您的具体查询List&lt;?&gt; customFindQuery(String tableName,int offset,int limit);

通过调用该方法已经在JpaRepository 中支持:

Page<T> findAll(Pageable pageable)

例如:

Page<User> all = userRepository .findAll(new PageRequest(3, 10));

其中 offest = 30 (3 x 10),limit = 10

【讨论】:

以上是关于spring jpa数据原生Sql查询出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA 之 原生SQL使用

spring jpa查询视图

Spring data jpa,原生查询Hibernate异常

java web spring jpa 在以接口为dao的方法里使用原生sql,联合查找没有对应实体,用啥来接收? 求大神

Spring Data JPA 原生查询结果实体

Spring data JPA,复杂原生Query