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<?> 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,原生查询Hibernate异常
java web spring jpa 在以接口为dao的方法里使用原生sql,联合查找没有对应实体,用啥来接收? 求大神