代码之家  ›  专栏  ›  技术社区  ›  user8363477

Spring Boot JPA分页异常

  •  0
  • user8363477  · 技术社区  · 6 年前

    我正在为我的服务实现分页,其中limit和offset是请求主体的一部分。当我在服务级别的PageRequest中设置这些值时,我得到以下错误和实现

    Caused by: java.lang.IllegalArgumentException: Either use @Param on all parameters except Pageable and Sort typed once, or none at all!
        at org.springframework.util.Assert.isTrue(Assert.java:92) ~[spring-core-4.3.12.RELEASE.jar:4.3.12.RELEASE]
        at org.springframework.data.repository.query.Parameters.assertEitherAllParamAnnotatedOrNone(Parameters.java:297) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.repository.query.Parameters.<init>(Parameters.java:91) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.query.JpaParameters.<init>(JpaParameters.java:43) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.query.JpaQueryMethod.createParameters(JpaQueryMethod.java:325) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.query.JpaQueryMethod.createParameters(JpaQueryMethod.java:53) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.data.repository.query.QueryMethod.<init>(QueryMethod.java:77) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.query.JpaQueryMethod.<init>(JpaQueryMethod.java:89) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:436) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:221) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:263) ~[spring-data-commons-1.13.8.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:101) ~[spring-data-jpa-1.11.8.RELEASE.jar:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
        ... 55 common frames omitted
    

    学生要求:

    {
      "name": "string",
      "paging": {
        "limit": 0,
        "startOffset": 0
      }
    }
    

    @Service
    public class StudentService {
    
        @Autowired
        private StudentRepository studentRepository;
    
        public List<Student> getAllStudents(StudentRequest studentRequest) {
    
           List<Student> studentList = studentRepository.getAll(studentRequest,new PageRequest(studentRequest.getPaging().getStartOffset(), studentRequest.getPaging().getLimit()));
           return studentList;
        }
    }
    

    学生资料库:

    @Repository
    public interface StudentRepository extends CrudRepository<Student, Long> {
    
        @Query(value = "select o from Student  o  where (o.name = :#{#studentRequest.name} OR :#{#studentRequest.name} IS NULL ) ")
        public List<Student> getAll(@Param("studentRequest") StudentRequest studentRequest, PageRequest pageRequest);
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Deividi Cavarzan    6 年前

    检查错误:

    use @Param on all parameters except Pageable and Sort typed once, or none at all!

    不能 @Param 在一个 Pageable PageRequest )以及 Sort 参数,它们由spring自动处理。

    @Param("pageRequest") 它会起作用的。

    可寻呼 页面请求

        2
  •  0
  •   Dovmo    6 年前

    看来失败的断言只是想让你 AllParamAnnotatedOrNone

    public List<Student> getAll(@Param("studentRequest") StudentRequest studentRequest, 
        @Param("pageRequest") PageRequest pageRequest);
    

    即使你没有使用它;这里只需要一个模式(即命名的Spring数据参数)或另一个模式(即推断的Spring数据参数名称)。