启动应用时Repo出现NullPointerException问题排查
问题分析与解决方案
问题概述
应用此前运行正常,重启后突然抛出QueryCreationException,无法为UserRepo.linkUserWithOffice(Long, Long)方法创建查询,根源是QueryUtils.createCountQueryFor处的空指针异常。已尝试重新导入Maven依赖、删除数据库,问题未解决。
排查与解决方法
修正@Query注解配置
该方法大概率使用了@Query注解(尤其是原生SQL),Spring Data JPA自动生成count查询时触发了NPE。如果是更新类操作,需添加@Modifying和@Transactional注解,无需自动生成count查询:@Modifying @Transactional @Query(value = "UPDATE user SET office_id = ?2 WHERE id = ?1", nativeQuery = true) void linkUserWithOffice(Long userId, Long officeId);若必须保留count查询逻辑,需手动指定
countQuery参数:@Query(value = "UPDATE user SET office_id = ?2 WHERE id = ?1", nativeQuery = true, countQuery = "SELECT COUNT(*) FROM user WHERE id = ?1") void linkUserWithOffice(Long userId, Long officeId);替换为稳定版Spring Data JPA
当前使用的是2.7.8-SNAPSHOT快照版本,可能存在未修复的bug。将依赖切换到同分支的稳定发布版(如2.7.9),修改pom.xml:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.7.9</version> </dependency>彻底清理编译缓存
仅重新导入Maven依赖可能不够,需清理项目编译目录后重新构建:mvn clean compile验证实体类映射一致性
确认User实体与数据库表的字段映射完全匹配,尤其是office关联字段(如officeId)的注解配置,避免隐性映射错误导致查询解析失败。
内容的提问来源于stack exchange,提问作者Ayush Basnet
相关产品推荐
相关产品推荐

