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

切换至javax后Spring Boot Data JPA中EntityManager注入失败问题

问题:从Jakarta切换至Javax后EntityManager无法注入

项目从Jakarta切换到Javax(因需求必须使用Javax)后,出现EntityManager无法注入的问题,此前使用Jakarta时运行正常。


配置与代码信息

application.yaml

spring:
  jpa:
    hibernate:
      ddl-auto: update
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/stage3_module3
    username: postgres
    password: root

启动类代码

@SpringBootApplication
public class NewsManagementApplication {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(NewsManagementApplication.class, args);
        NewsManagementMenu menu = context.getBean(NewsManagementMenu.class);
        menu.setScanner(new Scanner(System.in));
        menu.runMenu();
    }
}

Repository代码

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
import java.util.Optional;


@Repository
public class NewsRepository implements BaseRepository<NewsModel, Long> {
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @SuppressWarnings("unchecked")
    public List<NewsModel> readAll() {
        return entityManager.createQuery("select n from NewsModel n").getResultList();
    }

    @Override
    public Optional<NewsModel> readById(Long id) {
        return Optional.ofNullable(entityManager.find(NewsModel.class, id));
    }

    @Transactional
    @Override
    public NewsModel create(NewsModel entity) {
        entityManager.persist(entity);
        return entity;
    }

    @Transactional
    @Override
    public NewsModel update(NewsModel entity) {
        Optional<NewsModel> maybeNull = readById(entity.getId());
        if (maybeNull.isEmpty()) {
            return null;
        }
        NewsModel toUpdate = maybeNull.get();
        toUpdate.setTitle(entity.getTitle());
        toUpdate.setContent(entity.getContent());
        toUpdate.setLastUpdateDate(entity.getLastUpdateDate());
        toUpdate.setAuthor(entity.getAuthor());
        toUpdate.setTags(entity.getTags());
        return toUpdate;
    }

    @Transactional
    @Override
    public boolean deleteById(Long id) {
        return entityManager.createQuery("delete from NewsModel n where n.id=:id")
                .setParameter("id", id)
                .executeUpdate() != 0;
    }

    @Override
    public boolean existById(Long id) {
        return readById(id).isPresent();
    }
}

依赖配置

dependencies {
        implementation "org.springframework:spring-context:$springVersion"
        testImplementation "org.springframework:spring-test:$springVersion"
        testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
        testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
        testImplementation "com.tngtech.archunit:archunit-junit5:$archUnitVersion"
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa:3.0.2'

        implementation 'org.postgresql:postgresql:42.5.2'
        testImplementation 'org.mockito:mockito-core:5.1.1'
        testImplementation 'org.mockito:mockito-junit-jupiter:5.1.1'
        implementation 'javax.persistence:persistence-api:1.0'
    }

报错信息

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


解决方法

  1. 将spring-boot-starter-data-jpa版本从3.0.2修改为2.7.7
  2. 添加依赖:'javax.xml.bind:jaxb-api:2.3.1'

内容的提问来源于stack exchange,提问作者Grigoriev Egor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22