所以我们有一个带@DBRef列表的集合。
/**
* List of company users
*/
@DBRef
public List<CompanyUser> companyUsers = new ArrayList<>();
Spring Data非常智能地将新条目插入到相应的子集合中,然后每当我们在文档上调用 save 时,都会使用id引用更新父集合。
我要做的是添加一个带更新调用的子元素,而不是获取整个文档,添加元素然后再次调用save。
这不允许我这样做,我想它会尝试直接添加孩子,并指出它需要引用而不是提供错误。
其他方式是进入子集合并使用该id作为引用ID并调用update。
但是当我有一个子元素和文档的id时,有没有办法在一次调用spring数据时这样做?
public Company addUserToCompany(String id, CompanyUser companyUser) throws CimplyfiveException{
Query query = new Query(new Criteria("_id").is(new ObjectId(id)));
Update update = new Update().addToSet("companyUsers", companyUser);
return modify(query, update, Company.class);
}
public <T> T modify(final Query query, final Update update, final Class<T> clazz){
return geMongoTemplate().findAndModify(query, update, clazz);
}
错误:
Cannot create a reference to an object with a NULL id.
P.S - 我知道@DBRef是一个糟糕的主意,但这不是我的想法,我不在那里投票反对它。 :d