如何确保在创建时可以插入特定字段,但在更新对象时可以选择排除这些字段。
我基本上正在寻找以下内容:
但问题在于现在它会对所有内容使用Mongo $set形式的更新,而不仅仅是特定情况。请指导是否有更简单(且正确)的方法来实现这一点。
mongoOperations.save(theObject, <fields to ignore>)
据我所见,最近引入的@ReadOnlyProperty会在插入和更新时都忽略该属性。
我可以通过实现自定义的MongoTemplate并覆盖其doUpdate方法来获得所需的行为,如下所示:
@Override
protected WriteResult doUpdate(String collectionName, Query query,
Update originalUpdate, Class<?> entityClass, boolean upsert, boolean multi) {
Update updateViaSet = new Update();
DBObject dbObject = originalUpdate.getUpdateObject();
Update filteredUpdate = Update.fromDBObject(dbObject, "<fields to ignore>");
for(String key : filteredUpdate.getUpdateObject().keySet()){
Object val = filteredUpdate.getUpdateObject().get(key);
System.out.println(key + "::" + val);
updateViaSet.set(key, filteredUpdate.getUpdateObject().get(key));
}
return super
.doUpdate(collectionName, query, updateViaSet, entityClass, upsert, multi);
}
但问题在于现在它会对所有内容使用Mongo $set形式的更新,而不仅仅是特定情况。请指导是否有更简单(且正确)的方法来实现这一点。