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

为ReactiveCrudRepository创建公共共享接口出现Bean创建错误,该方案是否可行?

问题原因

这个共享Repository的方案完全可以实现,报错原因是Spring Data R2dbc默认会把所有继承ReactiveCrudRepository的接口都当成需要实例化的Repository Bean,你的sharedRepo<T>是泛型公共接口,没有绑定具体实体类,Spring在实例化它的时候会把泛型T解析为Object,自然找不到对应@Table修饰的持久化实体,就抛出了这个错误。

Error creating bean with name 'sharedRepo' ... Couldn't find persistentEntity for type class java.lang.Object!

解决方案

给你的sharedRepo接口添加@NoRepositoryBean注解即可解决:

import org.springframework.data.repository.NoRepositoryBean

@NoRepositoryBean
interface sharedRepo<T> : ReactiveCrudRepository<T, UUID>

这个注解的作用就是告知Spring Data:不要为这个接口创建Repository实例,它仅作为父接口供其他业务Repository继承。加完之后就不会再尝试实例化sharedRepo,报错会直接消失。

其他代码问题修正

  1. 扩展方法里的save调用需要传入参数,原有写法存在语法问题,修正后示例:
fun <T> sharedRepo<T>.persist(item: T) = runCatching {
    save(item)
}
  1. Service层调用时注意类型匹配:AClassRepository绑定的实体是itemA,只能调用它的方法传入itemA类型的实例,BClassRepository同理,你现有代码里repositoryB.persist(someInstanceOfItemA)存在类型编译错误,需要修正参数类型。

内容的提问来源于stack exchange,提问作者B-mdawg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:03