需要帮助:由以下原因引起:java.lang.NullPointerException:无法调用“String.contains(java.lang.CharSequence)”,因为“变量”为空

问题描述 投票:0回答:2

我正在尝试将我的 SpringBoot 版本从 2.1.1 升级到 2.7.x (2.7.5){Java 版本 - 17},当我尝试运行我的应用程序时,我收到以下错误消息

Caused by: java.lang.NullPointerException: Cannot invoke "String.contains(java.lang.CharSequence)" 因为 "variable" 为 null 在 org.springframework.data.jpa.repository.query.QueryUtils.createCountQueryFor(QueryUtils.java:607) 在 org.springframework.data.jpa.repository.query.DefaultQueryEnhancer.createCountQueryFor(DefaultQueryEnhancer.java:49) 在 org.springframework.data.jpa.repository.query.StringQuery.deriveCountQuery(StringQuery.java:119) 在 org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.(AbstractStringBasedJpaQuery.java:72) 在 org.springframework.data.jpa.repository.query.NativeJpaQuery.(NativeJpaQuery.java:53) 在 org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:51) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:169) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:253) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:93) 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:103) ...省略了 60 个常用框架

这是我的依赖项:


implementation 'org.springframework.boot:spring-boot:2.7.5'

    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter-parent:2.7.5')

    implementation('org.springframework:spring-jdbc')
    implementation('org.springframework:spring-orm')
    implementation('org.springframework:spring-core')
    implementation('org.springframework:spring-beans')
    implementation('org.springframework:spring-webmvc')
    implementation('org.springframework:spring-web')
    implementation('org.springframework:spring-context')
    testImplementation 'org.springframework:spring-test:5.3.25'
    compileOnly group: 'javax.servlet', name: 'servlet-api', version: '2.5'
    runtime("org.springframework.boot:spring-boot-properties-migrator")
    compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
    implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '9.0.56'
    implementation group: 'org.hibernate', name: 'hibernate-core', version: '5.6.5.Final'
    implementation 'org.springframework.cloud:spring-cloud-context:3.1.0'
    implementation group: 'org.springframework.security', name: 'spring-security-core', version: '5.6.9'
    implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
    implementation group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.4.0.Final'
    implementation group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.1-api', version: '1.0.2.Final'
    implementation("net.bytebuddy:byte-buddy:1.14.0")
    compileOnly 'org.projectlombok:lombok:1.18.26'
    annotationProcessor 'org.projectlombok:lombok:1.18.26'

正在为此寻找解决方案。这个块抛出一个错误:

@Modifying
    @Transactional
    @Query(value = "INSERT INTO W (CREATED_DATE, PRODUCT_CODE, TENANT_ID, UPDATED_DATE, UUID, STORE_ID) SELECT TO_TIMESTAMP(:createdDate, :format), :productCode, :tenantId, TO_TIMESTAMP(:updatedDate, :format), :uuid, :storeId FROM W WHERE ROWNUM <= 1 AND NOT EXISTS (select * from W w2 WHERE UUID = :uuid  AND PRODUCT_CODE =:productCode)" ,nativeQuery = true)
    int insertIntoW(@Param("format") String format, @Param("createdDate")String createdDate, @Param("productCode")String productCode, @Param("tenantId")String tenantId, @Param("updatedDate") String updatedDate, @Param("uuid")String uuid, @Param("storeId") String storeId);

spring-boot spring-data-jpa nullpointerexception jpa-2.1 java-17
2个回答
3
投票

更新

spring boot新版本

2.7.10
已经发布,解决了这个问题。在 maven dependencyManagement 标签中使用
spring-boot-dependencies
或版本为
2.7.10

的 spring boot parent

Spring boot 版本 2.7.9 的解决方案

spring-data-jpa:2.7.8
中似乎有一个问题(这个版本被
spring-boot-starter-data-jpa:2.7.9
使用)导致解析原生查询时出错。该错误似乎已在版本
2.7.10
中修复。一个对我有用的临时修复是在maven依赖管理部分覆盖
spring-data-jpa
的版本,如下所示:

<dependencyManagement>
    <dependencies>
      ...
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.7.10</version>
        </dependency>
      ...
    <dependencies>
<dependencieManagement>

这里也讨论这个话题:https://github.com/spring-projects/spring-boot/issues/34363 在这里:https://github.com/spring-projects/spring-data-jpa/issues/2812

请记住,这是一个临时修复。一旦新版本的

spring-boot-stater-data-jpa
使用新版本的
spring-data-jpa
,您应该删除覆盖并使用 spring 的版本管理来保持一致性。


1
投票

我对 spring-boot 2.7.9 有同样的问题

看了这个spring-boot page issue后,我换了spring boot版本。版本 2.6.6 解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.