使用弹簧数据更新@DBref

时间:2016-05-16 06:18:05

标签: java spring mongodb spring-data

所以我们有一个带@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

0 个答案:

没有答案