查找ReactiveCrudRepository实现类及save方法相关技术咨询
ReactiveCrudRepository 实现类定位及 save 方法行为解析
实现类位置
- 基础通用实现:Spring Data 为
ReactiveCrudRepository提供的核心默认实现是SimpleReactiveCrudRepository,包路径为org.springframework.data.repository.core.support。所有自定义的响应式仓库接口(标注@Repository),默认都会通过动态代理关联到这个类。 - 特定数据库扩展实现:如果使用MongoDB、Redis等具体数据存储,还有对应适配的实现类:
- MongoDB:
SimpleReactiveMongoRepository,位于org.springframework.data.mongodb.repository.support - Redis:
SimpleReactiveRedisRepository,位于org.springframework.data.redis.repository.support
这些类都是基于SimpleReactiveCrudRepository扩展,针对不同数据库的特性做了定制。
- MongoDB:
save 方法未文档化行为说明
你提到的 save 方法会修改原实体 ID 的副作用,查看 SimpleReactiveCrudRepository 的实现逻辑就能明确:
保存给定实体。请使用返回的实例进行后续操作,因为保存操作可能完全改变了实体实例。
文档虽未明确标注会修改原对象ID,但实现中,当实体为新建状态(ID为空)时,生成的ID会同时设置到原实体对象和返回的实体对象中。这种设计是为了兼容部分场景对原对象的直接使用,但官方明确推荐使用返回的实例进行后续操作,避免依赖这种未显性文档化的行为。
内容的提问来源于stack exchange,提问作者Endre Moen
相关产品推荐
相关产品推荐

