首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未使用spring-data-couchbase将空值持久化到Couchbase

未使用spring-data-couchbase将空值持久化到Couchbase
EN

Stack Overflow用户
提问于 2016-09-19 17:41:54
回答 2查看 746关注 0票数 1

当我尝试使用CrudRepository持久化@Document时,对象中的所有空字段都不会写入数据库。

示例(Object obj):

代码语言:javascript
复制
{ 
    "field1": {
        "field11": 123
    },
    "field2": null,
    "field3": "abc"
}

objRepo.save(obj),field2不会被写入到Couchbase。

是否有可能覆盖spring存储库的行为来保存空值?我是否必须创建自己的MappingCouchbaseConverter,或者可能与TranslationService有关

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-19 18:20:20

目前还不支持显式地存储空值,因此您可能需要对MappingCouchbaseConverter进行修补。我认为修改其中一个writeInternal方法将是一个很好的开始:类似于对空情况执行writeSimpleInternal(null, target, prop.getFieldName()); ...

票数 2
EN

Stack Overflow用户

发布于 2018-08-17 18:19:16

所以我遇到了同样的问题,在spring-data-CouchBase3.x中,你需要扩展MappingCouchBaseConverter并基本上重写一堆方法(主要是复制私有方法)。

实际的更改在

代码语言:javascript
复制
protected void writeInternal(final Object source, final CouchbaseDocument target,
        final CouchbasePersistentEntity<?> entity)

在这里,您必须找到if (null != propertyObj)的检查,并使用以下命令添加一个else块:

代码语言:javascript
复制
else {
    writeSimpleInternal(null, target, prop.getFieldName());
}

我觉得spring团队可能只需要添加一个序列化null (或不序列化null)的选项,然后进行这个小更改。但是如果你不想等待这些改变--只要继承他们的类,在你的CouchBaseConfig中重写并添加转换器就可以了:

代码语言:javascript
复制
@Override
public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception {
    CustomMappingCouchbaseConverter converter = new CustomMappingCouchbaseConverter(couchbaseMappingContext(), typeKey());
    converter.setCustomConversions(customConversions());
    return converter;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39569973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档