问题:最近将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试一试