今天在自己搭建一个springboot+jpa项目启动的时候遇到这个错。百度了许多,这里整理一下自己的解决思路。
Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: interface com.xxxx.project.dao.UserRepository
1、查看报错类,发现是UserRepository,找到这个类,是dao的repository。百度说看是不是实体类没加@Entity注解啊,字段没加@Id,@GeneratedValue,或者注解用的包不是persistence包下的。这些我都是正确的。
2、然后又百度到在启动类上加@EntityScan,@ComponentScan什么的,还要加上扫描包的路径,因为我这个项目只是一个简单的学习项目,其实了解了springboot启动原理之后就知道,@SpringBootApplication这个注解里面就包含了自动扫描项目下的包,包括实体类的、dao、service的,可以不用在画蛇添足指定路径。
那么为什么启动时候注入失败呢,后面发现是代码错误
public interface UserRepository extends
PagingAndSortingRepository<UserRepository,Long>,
JpaSpecificationExecutor<User> {
PagingAndSortingRepository括号内 应该是对应的实体类和主键数据类型,这边因为idea自动补足把User写成了UserRepository。发现的时候真的是有够无语= =,下面是正确的写法:
public interface UserRepository extends
PagingAndSortingRepository<User,Long>,
JpaSpecificationExecutor<User> {
总结:以后coding的时候要更认真才行!