首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring data jpa rise NullPointerException on custom select

Spring data jpa rise NullPointerException on custom select
EN

Stack Overflow用户
提问于 2019-08-06 22:41:47
回答 1查看 528关注 0票数 0

我已经将我应用程序从spring boot 1.5.6更新到2.0.6,在仓库方法调用期间,spring data jpa会引发以下异常:

代码语言:javascript
复制
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>)

调用的方法是:

代码语言:javascript
复制
@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);

问题似乎与包含可分页和排序依据的查询有关。也许在新的spring data jpa中有一些改变。你知道吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-08-07 15:52:35

似乎在JPA2.0中,当使用可分页时,必须设置sortColumn并避免直接在查询字符串中使用order by。

因此,查询要么在空值时可分页(在查询字符串中使用order by),要么在使用可分页时设置sortColumn (不带order by )。

工作的rest调用:

代码语言:javascript
复制
{"languageId":1,"plantId":1,"pagination":{"pageNumber":"1","pageSize":"8","offset":"0","sortColumn":"id","sortDirection":"Ascending"}}

{"languageId":1,"plantId":1}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57378605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档