使用Springboot Mongo Repository @DocumentReference关联一对一数据返回错误
问题修复方案
核心问题:SpEL表达式字段名大小写不匹配
你的@DocumentReference注解里的lookup表达式写错了字段名大小写,导致查询匹配逻辑失效,返回了集合第一个文档。
修正后的注解配置
根据你的实体类和MongoDB文档字段,调整lookup的查询条件和SpEL表达式的属性名:
@ReadOnlyProperty @DocumentReference(lookup = "{'UnitId':? #{#target.unitId}}") private Organisation organisation;
- 注意:
{'UnitId': ...}对应MongoDB文档里的字段名(你提到Employee和Organisation文档的字段是UnitId) #{#target.unitId}对应Employee实体类中的属性名(Java通常用驼峰命名,若你的实体类属性是UnitId,则改成#{#target.UnitId})
辅助优化建议
- 给Organisation的UnitId加索引
在Organisation实体类的UnitId字段上添加@Indexed注解,提升关联查询的准确性和性能:
@Indexed private String UnitId;
确认数据匹配度
检查MongoDB中Employee文档的UnitId值和对应Organisation文档的UnitId值是否完全一致(包括大小写、特殊字符),避免因为值不匹配导致查询错误。处理一对多场景
如果同一个UnitId对应多个Organisation文档,@DocumentReference默认会返回第一个匹配项。这种情况下,你需要把Employee实体类中的organisation属性类型改成List<Organisation>,或者确保每个UnitId在Organisation集合中唯一。
内容的提问来源于stack exchange,提问作者Gagan Noor Singh
相关产品推荐
相关产品推荐

