查看MongoDB数据库,集合里的主键_id有值。
但是开发时Java代码中使用mongoTemplate.findById(id, 实体.class, COLLECTION_NAME)
mongoTemplate.findOne(query, 实体.class)时,返回的数据为null。
数据库执行查询语句db.collection.find({"_id":2021080400123}) 发现也返回空值。
问题排查:
查看我的实体类定义

@Data
@ToString
@Accessors(chain = true)
public class Template {

    @MongoId
    private String id;
    /**
     * 模板名称
     */
    private String templateName;
    /**
     * 模板链接
     */
    private String templateLink;
    ……
}

将id主键的类型设置成ObjectId

@MongoId
    private ObjectId id;

mongoTemplate.findById(new ObjectId(id), 实体.class, COLLECTION_NAME);
········································································································
小编出现这样的问题是在项目开发的时候,使用了自定义的id生成
String id = DateUtils.format(new Date(),“yyyyMMddHHmmssSSS”).concat(RandomStringUtils.randomNumeric(3));
而在其中一个集合添加关联id时,忘记使用自定义id,使得id传值为空。
我们知道MongoDB数据库的插入mongoTemplate.insert方法,如果没有传入主键id,默认会生成ObjectId类型的主键_id。因此开发用String类型的id去查数据库中ObjectId类型的id就返回null了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐