当我尝试使用CrudRepository持久化@Document时,对象中的所有空字段都不会写入数据库。
示例(Object obj):
{
"field1": {
"field11": 123
},
"field2": null,
"field3": "abc"
}objRepo.save(obj),field2不会被写入到Couchbase。
是否有可能覆盖spring存储库的行为来保存空值?我是否必须创建自己的MappingCouchbaseConverter,或者可能与TranslationService有关
发布于 2016-09-19 18:20:20
目前还不支持显式地存储空值,因此您可能需要对MappingCouchbaseConverter进行修补。我认为修改其中一个writeInternal方法将是一个很好的开始:类似于对空情况执行writeSimpleInternal(null, target, prop.getFieldName()); ...
发布于 2018-08-17 18:19:16
所以我遇到了同样的问题,在spring-data-CouchBase3.x中,你需要扩展MappingCouchBaseConverter并基本上重写一堆方法(主要是复制私有方法)。
实际的更改在
protected void writeInternal(final Object source, final CouchbaseDocument target,
final CouchbasePersistentEntity<?> entity)在这里,您必须找到if (null != propertyObj)的检查,并使用以下命令添加一个else块:
else {
writeSimpleInternal(null, target, prop.getFieldName());
}我觉得spring团队可能只需要添加一个序列化null (或不序列化null)的选项,然后进行这个小更改。但是如果你不想等待这些改变--只要继承他们的类,在你的CouchBaseConfig中重写并添加转换器就可以了:
@Override
public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception {
CustomMappingCouchbaseConverter converter = new CustomMappingCouchbaseConverter(couchbaseMappingContext(), typeKey());
converter.setCustomConversions(customConversions());
return converter;
}https://stackoverflow.com/questions/39569973
复制相似问题