由于java出现虚拟线程提高性能,想把项目直接升级到java21,同时使用springboot3.x的新特性,所以出现了使用spring data jpa的问题。先添加如下的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
启动类上添加扫描包:
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(basePackages = {"com.controller", "com.service"})
// 指定controll、service路径
@EnableJpaRepositories(basePackages = {"com.dao"}) // 指定Repository路径
@EntityScan(basePackages = {"com.pojo"}) // 指定实体类路径
@EnableJpaAuditing
public class SystemApplication {
public static void main(String[] args) {
SpringApplication.run(SystemApplication.class, args);
}
}
同时实体类上添加对应注解:
import jakarta.persistence.*;
@Entity
@Table(name = "sys_config")
public class SysConfig {
}
注意:这里就出现了坑——关于java21和spring data jpa升级之后,注解@Entity相关的jpa,都统一从 javax.persistence 转为使用 jakarta.persistence下的注解,这个问题困扰了好几天。
问题:出现Not a managed type: class *** !!!
大部分问题都是 jpa 没有扫描到指定实体对象导致,可能出现的问题就是@Entity导入不正确。
Caused by: java.lang.IllegalArgumentException: Not a managed type: class cn.pcrazywang.fuyun.system.pojo.SysConfig
解决方案:引入正确的 @Entity 包