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

Spring Boot应用报错:Article类非JPA托管类型

解决Spring Boot中JPA实体"Not a managed type"错误

错误信息

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleController': Unsatisfied dependency expressed through field 'articleRepository': Error creating bean with name 'articleRepository' defined in com.example.work.repositories.ArticleRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Not a managed type: class com.example.work.models.Article

问题分析

核心问题是实体ID类型与Repository泛型不匹配:

  • Article实体中id字段为int类型,但ArticleRepository继承CrudRepository时指定的ID泛型是Long,导致JPA无法正确识别该实体为受管理的JPA类型。
  • 你的项目结构中,启动类、实体、Repository都在com.example.work及其子包下,默认包扫描范围是生效的,因此包扫描问题不是主要原因,但可作为备选排查点。

解决方案

方案1:修正Repository的ID泛型类型

将ArticleRepository的泛型参数改为与实体id一致的Integer(int的包装类):

package com.example.work.repositories;

import com.example.work.models.Article;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ArticleRepository extends CrudRepository<Article, Integer> {
}

方案2:修改实体的ID类型为Long

如果更倾向于使用Long作为ID类型(推荐用于自增ID场景),修改Article实体:

package com.example.work.models;

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

@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id; // 将int改为Long

    private String name;
    private String description;
    private String text;

    public Article(String name, String description, String text) {
        this.name = name;
        this.description = description;
        this.text = text;
    }

    public Article(){}

    // 对应修改getter和setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    // 其他getter和setter保持不变
    public String getName() {
        return name;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

备选方案:显式指定扫描范围(若默认扫描失效)

如果默认包扫描未生效,在启动类中添加注解明确指定实体和Repository的扫描包:

package com.example.work;

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.work.models")
@EnableJpaRepositories(basePackages = "com.example.work.repositories")
public class WorkApplication {

    public static void main(String[] args) {
        SpringApplication.run(WorkApplication.class, args);
    }

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30