将springboot从1.5.14升级到2.7.9后,启动报nullPointException异常

问题:最近将springboot从1.5.14升级到2.7.9后,启动报nullPointException异常,尝试过将sql语句表名改为实体名,字段值改为属性值,重新启动任然报该异常。


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderInfoDao' defined in com.kmair.transfer.dao.OrderInfoDao defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract void com.kmair.transfer.dao.OrderInfoDao.cancelOrder(java.lang.String); Reason: null; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
    ... 175 more
Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract void com.kmair.transfer.dao.OrderInfoDao.cancelOrder(java.lang.String); Reason: null; nested exception is java.lang.NullPointerException
    at org.springframework.data.repository.query.QueryCreationException.create(QueryCreationException.java:101)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:107)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(QueryExecutorMethodInterceptor.java:95)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections.java:1049)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:97)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:87)
    at java.util.Optional.map(Optional.java:215)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.<init>(QueryExecutorMethodInterceptor.java:87)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:365)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:323)
    at org.springframework.data.util.Lazy.getNullable(Lazy.java:231)
    at org.springframework.data.util.Lazy.get(Lazy.java:115)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:329)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
    ... 185 more
Caused by: java.lang.NullPointerException
    at org.springframework.data.jpa.repository.query.QueryUtils.createCountQueryFor(QueryUtils.java:607)
    at org.springframework.data.jpa.repository.query.DefaultQueryEnhancer.createCountQueryFor(DefaultQueryEnhancer.java:49)
    at org.springframework.data.jpa.repository.query.StringQuery.deriveCountQuery(StringQuery.java:119)
    at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.<init>(AbstractStringBasedJpaQuery.java:72)
    at org.springframework.data.jpa.repository.query.NativeJpaQuery.<init>(NativeJpaQuery.java:53)
    at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:51)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:169)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:253)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:93)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:103)
    ... 207 more
 

    @Transactional(rollbackFor = Exception.class)
    @Modifying
    @Query(value = " update tf_order_info oi,tf_order_accompany oa  set oi.order_status='3',oa.order_status='3' where oi.order_id=?1 and oi.order_id = oa.order_id ", nativeQuery = true)
    void cancelOrder(String orderId);
 
@Entity
@Table(name = "tf_order_info")
public class OrderInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 订单ID 主键
     */
    @Id
    private String orderId;
...
 
@Entity
@Table(name = "tf_order_accompany")
public class OrderAccompany implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID主键
     */
    @Id
    private String id;

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据报错信息,您的问题似乎是由于在JPA查询中使用了空的查询字符串(null pointer exception)而引起的。在错误消息中,可以看到NullPointerException是在QueryUtils.createCountQueryFor()中引发的,该方法是Spring Data JPA用于创建计数查询的内部方法。

在升级Spring Boot版本后,可能会有一些JPA查询的API有所更改,因此可能需要更新您的查询以适应新版本。更改的一种可能是@Query注释的语法。您可以尝试将你的查询语句改为如下形式:

@Modifying
@Query("update OrderInfo oi set oi.orderStatus = '3' where oi.orderId = ?1")
void cancelOrder(String orderId);

如果您需要更新两个表中的记录,可以使用JPA的内置支持来完成这个操作,而不是使用原生SQL查询。例如:

@Modifying
@Query("update OrderInfo oi, OrderAccompany oa set oi.orderStatus = '3', oa.orderStatus = '3' where oi.orderId = oa.orderId and oi.orderId = ?1")
void cancelOrder(String orderId);

请注意,这两个查询都使用了“?1”参数占位符,这是Spring Data JPA的一种查询语法,用于保护您的应用程序免受SQL注入攻击。

希望这些信息可以帮助您解决问题。如果您需要进一步的帮助,请提供更多的信息,例如代码的完整清单和堆栈跟踪信息。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

这里 报错看看

java.lang.NullPointerException
    at org.springframework.data.jpa.repository.query.QueryUtils.createCountQueryFor(QueryUtils.java:607)

用jpa自带的不用native试一试