Spring boot Spring数据jpa上升零点自定义选择异常

Spring boot Spring数据jpa上升零点自定义选择异常,spring-boot,spring-data-jpa,spring-data,Spring Boot,Spring Data Jpa,Spring Data,我已将我的应用程序从spring boot 1.5.6更新到2.0.6,在一个存储库方法调用期间,spring data jpa出现以下异常: 2019-08-06 15:06:09,856 DEBUG org.springframework.web.servlet.DispatcherServlet : Failed to complete request: java.lang.NullPointerException 2019-08-06 15:06:09,929 ERROR org.apa

我已将我的应用程序从spring boot 1.5.6更新到2.0.6,在一个存储库方法调用期间,spring data jpa出现以下异常:

2019-08-06 15:06:09,856 DEBUG org.springframework.web.servlet.DispatcherServlet : Failed to complete request: java.lang.NullPointerException
2019-08-06 15:06:09,929 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/eLedService].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/eLedService] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
    at org.springframework.data.jpa.repository.query.QueryUtils.applySorting(QueryUtils.java:243)
    at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateQuery(AbstractStringBasedJpaQuery.java:86)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:210)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:91)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:136)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:125)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:138)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy116.findUnregisteredMeters(Unknown Source)
    at it.eng.eled.data.services.meters.MeterService.findUnregisteredMeters(MeterService.java:89)
    at it.eng.eled.data.services.meters.MeterService$$FastClassBySpringCGLIB$$62d07def.invoke(<generated>)
调用的方法是:

@Query("SELECT m FROM Meters m JOIN FETCH m.metersInternationalizations mi LEFT JOIN FETCH m.uoM uom LEFT JOIN FETCH uom.uoMInternationalizations uomi WHERE m.plants.id = :plantId AND mi.id.languageId = :languageId AND uomi.id.languageId = :languageId ORDER BY m.id")
    public List<Meters> findUnregisteredMeters(@Param("plantId") Integer plantId, @Param("languageId") Integer languageId, Pageable pageable);
问题似乎与包含Pageable和orderby的查询有关。也许在新的spring数据jpa中发生了一些变化。 你知道吗?
谢谢

在JPA2.0中,当使用Pageable时,必须直接在查询字符串中设置sortColumn并避免order by

因此,查询要么在查询字符串中使用带order by的Pageable at null,要么在不带order by的情况下设置sortColumn(如果使用Pageable)

工作休息电话:

{"languageId":1,"plantId":1,"pagination":{"pageNumber":"1","pageSize":"8","offset":"0","sortColumn":"id","sortDirection":"Ascending"}}

{"languageId":1,"plantId":1}

分享该存储库方法的示例调用Hi Nikolay我已经添加了一个答案,您可以在其中找到更多详细信息。