You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中EntityManager为空引发空指针异常求助

Spring Boot中EntityManager注入NullPointerException问题解决

问题现象

调用EntityManager的createQuery方法时触发NullPointerException,错误信息:

Cannot invoke "javax.persistence.EntityManager.createQuery(String)" because "this.entityManager" is null

核心问题及修复方案

1. Jakarta与Javax API版本冲突

Spring Boot 3.x基于Jakarta EE 9+,所有JPA相关注解和API都迁移到了jakarta.persistence.*包,但当前代码和依赖存在混用:

  • Repository类中导入了javax.persistence.EntityManager和javax.persistence.PersistenceContext
  • pom.xml中额外引入了javax.persistence:persistence-api依赖,与Spring Boot自带的Jakarta API冲突

修复步骤:

  • 移除pom.xml中的javax.persistence:persistence-api依赖:
<!-- 删除以下依赖 -->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>
  • 修改Repository类的导入为Jakarta包:
// 替换原javax导入为jakarta
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;

2. 查询语句缺少模糊查询通配符

当前查询仅匹配完全相等的字符串,不符合模糊查询需求,同时建议指定查询返回类型以避免类型转换问题:
修改Repository的search方法:

@Transactional(readOnly = true) // 查询操作添加readOnly属性优化性能
@Override
public List<WebPage> search(String textSearch){
    String query = "FROM WebPage WHERE description LIKE :textSearch";
    return entityManager.createQuery(query, WebPage.class)
            .setParameter("textSearch", "%" + textSearch + "%") // 添加%通配符实现模糊查询
            .getResultList();
}

3. application.properties配置错误

spring.jpa.hibernate.hbm2ddl.auto属性值拼写错误,应为update而非updatedup:
修改application.properties:

spring.jpa.hibernate.hbm2ddl.auto=update

4. 确保Repository接口被Spring扫描

检查SearchRepository接口所在包是否在Spring Boot主应用类的扫描范围内,若不在,可在主类添加@EnableJpaRepositories(basePackages = "com.cursojava.curso.respositories")指定扫描包。


内容的提问来源于stack exchange,提问作者carlos lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:24:59