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

Spring Boot JPA应用启动报错:实体类非托管类型

问题排查:Spring Boot启动报错“Not a managed type: class com.d043114.minimalJPA.City”

核心错误原因

主类中@EntityScan注解的包名存在拼写错误:com.d043114.minimlaJPA应为com.d043114.minimalJPA,导致Spring无法扫描到City实体类,触发“Not a managed type”异常。

此外代码中还有其他需要修复的问题,逐一说明如下:

问题修复步骤

1. 修正实体扫描包名

修改主类中的@EntityScan注解,修正拼写错误:

@EntityScan("com.d043114.minimalJPA")

2. 正确获取Spring应用上下文

main方法中直接使用appcontext但未定义,需接收SpringApplication.run()的返回值:

ConfigurableApplicationContext appcontext = SpringApplication.run(MinimalJpaApplication.class, args);

3. 补充实体类缺失字段

City类中未定义isCapital字段,但代码中调用了setIsCapital(),需添加对应字段及getter/setter:

private boolean isCapital;

public boolean isCapital() {
    return isCapital;
}

public void setCapital(boolean capital) {
    isCapital = capital;
}

4. 移除冗余注解

@SpringBootApplication已默认包含@ComponentScan(扫描主类所在包及子包),无需额外添加@ComponentScan(basePackages = "com.d043114.minimalJPA"),可直接删除。

修正后完整代码

主类MinimalJpaApplication.java

package com.d043114.minimalJPA;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
@EntityScan("com.d043114.minimalJPA")
public class MinimalJpaApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext appcontext = SpringApplication.run(MinimalJpaApplication.class, args);

        City berlin = new City();
        berlin.setName("Berlin");
        berlin.setCapital(true);
        
        City duesseldorf = new City();
        duesseldorf.setName("Düsseldorf");
        duesseldorf.setCapital(false);
        
        CityRepository cityRepository = appcontext.getBean(CityRepository.class);

        cityRepository.save(berlin);
        cityRepository.save(duesseldorf);
    }
}

实体类City.java

package com.d043114.minimalJPA;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "cities")
public class City {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO )
    private long ID;
    private String name;
    private boolean isCapital;
    
    public long getID() {
        return ID;
    }

    public void setID(long iD) {
        ID = iD;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isCapital() {
        return isCapital;
    }

    public void setCapital(boolean capital) {
        isCapital = capital;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:50:25