关于Java中的mongoTemplate.findById和findOne通过主键Id查询返回data为null的问题解决方案
查看MongoDB数据库,集合里的主键_id有值。但是开发时Java代码中使用mongoTemplate.findById(id, 实体.class, COLLECTION_NAME)和mongoTemplate.findOne(query, 实体.class)时,返回的数据为null。数据库执行查询语句db.collection.find({"_id":2021080400123}) 发现也返回
查看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了。
更多推荐
所有评论(0)