开发者社区> 问答> 正文

spring-data-jpa中使用泛型JpaRepository<T,I?报错

首先,我用interface BaseRepository extends JpaRepository<User,Integer>然后我在我的test放在中用
@Autowired
private BaseRepository baseRepository获取该bean,然后成功进行了CURD

但是当我把接口改成interface BaseRepository<T,ID> extendsJpaRepository<T,ID>
@Autowired
private BaseRepository<User,Integer> baseRepository进行curd操作报错
java.lang.IllegalStateException: Failed to load ApplicationContext
at 。。。。。。。。。。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object

然后有人提议在repsitory上加

@NotBeanRepository

但是还是报错


展开
收起
爱吃鱼的程序员 2020-06-14 17:17:52 1244 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    不难想的,spring在加载的时候,扫描类(或接口),组装bean,第二种在扫描到<spanstyle="color:#222222;font-family:'HelveticaNeue',Helvetica,Arial,sans-serif;line-height:22.1000003814697px;">BaseRepository时,不知道如何组装的,是个泛型,你是在将其注入到别的bean中才指定泛型参数,依赖注入是将对象自动注入到依赖的对象里面去,现在没bean能注入。
    <divclass='ref'>

    引用来自“guor”的评论

    不难想的,spring在加载的时候,扫描类(或接口),组装bean,第二种在扫描到<spanstyle="color:#222222;font-family:'HelveticaNeue',Helvetica,Arial,sans-serif;line-height:22.1000003814697px;">BaseRepository时,不知道如何组装的,是个泛型,你是在将其注入到别的bean中才指定泛型参数,依赖注入是将对象自动注入到依赖的对象里面去,现在没bean能注入。
    <divclass='ref'><divclass='ref'>

    引用来自“guor”的评论

    不难想的,spring在加载的时候,扫描类(或接口),组装bean,第二种在扫描到<spanstyle="color:#222222;font-family:'HelveticaNeue',Helvetica,Arial,sans-serif;line-height:22.1000003814697px;">BaseRepository时,不知道如何组装的,是个泛型,你是在将其注入到别的bean中才指定泛型参数,依赖注入是将对象自动注入到依赖的对象里面去,现在没bean能注入。
    无论在哪里BaseRepository只是一个接口注入的都是实现吧,关键是在这里组装时是要BaseRepository<User,Long>的实现,而扫描类的时候只有一个泛型接口BaseRepository<M,ID>,而此时也不能根据泛型生成响应的实现,来完成BaseRepository<User,Long>的组装呀<atarget="_blank"rel="nofollow">https://github.com/hantsy/spring4-sandbox/blob/master/generic-type-injection/src/test/java/com/hantsylabs/example/spring/dao/RepositoryGenericTypeBeanTest.java<divclass='ref'>

    引用来自“hantsy”的评论

    <atarget="_blank"rel="nofollow">https://github.com/hantsy/spring4-sandbox/blob/master/generic-type-injection/src/test/java/com/hantsylabs/example/spring/dao/RepositoryGenericTypeBeanTest.java<divclass='ref'><divclass='ref'><divclass='ref'>

    引用来自“guor”的评论

    不难想的,spring在加载的时候,扫描类(或接口),组装bean,第二种在扫描到<spanstyle="color:#222222;font-family:'HelveticaNeue',Helvetica,Arial,sans-serif;line-height:22.1000003814697px;">BaseRepository时,不知道如何组装的,是个泛型,你是在将其注入到别的bean中才指定泛型参数,依赖注入是将对象自动注入到依赖的对象里面去,现在没bean能注入。
    <divclass="ref"><divclass="ref"><divclass="ref"><divclass="ref">

    引用来自“guor”的评论

    不难想的,spring在加载的时候,扫描类(或接口),组装bean,第二种在扫描到<spanstyle="color:#222222;font-family:'HelveticaNeue',Helvetica,Arial,sans-serif;line-height:22.1000003814697px;">BaseRepository时,不知道如何组装的,是个泛型,你是在将其注入到别的bean中才指定泛型参数,依赖注入是将对象自动注入到依赖的对象里面去,现在没bean能注入。
    兄弟,这个问题我也遇到,是否已得到解决,我也想知道一下具体处理
    @NoRepositoryBeanpublicinterfaceBaseRepository<T>extendsJpaRepository<T,String>,QuerydslPredicateExecutor<T>{}
    publicabstractclassBaseService<T>{protectedfinalstaticLoggerlog=LoggerFactory.getLogger(CustomerService.class);@Lazy@AutowiredprotectedBaseRepository<T>repository;

    }

     

    帅哥,这样定义应该能解决你的具体问题吧!

    2020-06-14 17:18:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多