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
相关产品推荐
相关产品推荐

