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

Spring Boot中Car实体类报Not a managed type错误求助

Spring JPA启动报错:Not a managed type

问题描述

我不清楚代码中为何会出现该错误,几乎尝试了所有办法但问题仍未解决。(注:问题已在评论区解决)

实体类代码

package com.example.carsharing.repository.entity;

import javax.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "CAR")
@Data
@NoArgsConstructor
public class Car {
  @Id
  @GeneratedValue
  @Column(name = "ID")
  Long ID;
  @Column(name = "car_name")
  String carName;
  @Column(name = "company_id")
  Long companyId;

  public Car(long ID, String carName, long companyId) {
      this.ID = ID;
      this.carName = carName;
      this.companyId = companyId;
  }
}

报错信息

> 启动ApplicationContext失败。若要显示条件评估报告,请启用'debug'模式重新运行应用。
> 2023-07-21T17:00:49.296+02:00 ERROR 3872 --- [           main]
> o.s.boot.SpringApplication               : 应用启动失败
> 
> **org.springframework.beans.factory.BeanCreationException: 创建名为'carRepository'的Bean失败,该Bean定义在com.example.carsharing.repository.carRepository中,由Main类上的@EnableJpaRepositories注解声明:Not a managed type: class com.example.carsharing.repository.entity.Car**
>    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.10.jar:6.0.10]
>    ...(省略中间栈帧)
> **Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.example.carsharing.repository.entity.Car**
>    at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.managedType(JpaMetamodelImpl.java:192) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
>    ...(省略中间栈帧)

错误原因及解决办法

1. 核心原因:JPA包版本不匹配

Spring Boot 3.x 基于Jakarta EE规范,不再使用旧的javax.persistence包,而是替换为jakarta.persistence。你的实体类中导入的是javax.persistence.*,导致JPA无法识别@Entity注解,进而认定该类不是受管理的实体类型。

2. 修复步骤

  • 替换JPA包导入:修改实体类的导入语句,将javax.persistence.*替换为jakarta.persistence.*:
package com.example.carsharing.repository.entity;

import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "CAR")
@Data
@NoArgsConstructor
public class Car {
  // 类内容保持不变
}
  • 确保实体类被扫描:在主启动类Main上添加@EntityScan注解指定实体类所在包,同时确认@EnableJpaRepositories正确指向Repository所在包(若主类与实体/Repository在同一父包下,此步骤可省略,但显式声明更稳妥):
package com.example.carsharing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EntityScan(basePackages = "com.example.carsharing.repository.entity")
@EnableJpaRepositories(basePackages = "com.example.carsharing.repository")
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}
  • 验证依赖:确认项目中已正确引入Spring Data JPA依赖,Maven项目检查pom.xml,Gradle项目检查build.gradle:
    Maven依赖示例:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Gradle依赖示例:

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

内容的提问来源于stack exchange,提问作者Paweł Knapik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:59:57