Kap*_*nky 0 couchbase spring-data-couchbase
我在CouchBase存储库中持久化实体并尝试查询它.该实体看起来像这样:
@Document(expiry = 0)
public class GsJsonStore implements Serializable {
private static final long serialVersionUID = 7133072282172062535L;
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Field
private Map<String,Object> _object;
@Field
private String _subject;
@Field
private String _predicate;
//Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
我在CouchbaseOperations模板上使用N1QL查询来查询实体,如下所示:
String query1 = "SELECT META(default).id as _ID, META(default).cas as _CAS, default.* FROM default WHERE "+key+"="+"'"+value+"'";
List<GsJsonStore> list = operations.findByN1QL(N1qlQuery.simple(query1), GsJsonStore.class);
Run Code Online (Sandbox Code Playgroud)
我在_object Map中查询KV对.我收到一个错误:No mapping metadata found for java.lang.Object
为什么会这样?另外,我Map<String,Object>
在Couchbase中存储json对象,我尝试使用jackson JsonNode
类型,但对象也存储了类相关的元数据.是否有更好的数据类型来表示json类型?
编辑
存储在Couchbase中的数据:
{
"_object" : {
"Name" : "Kapil",
"Age" : {
"Nested" : 21
}
},
"_subject" : "Subject",
"_predicate" : "Predicate"
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的关键是_object.Name,值是'Kapil'
如此处所述,您应该覆盖默认的SPMappingCouchbaseConverter.
以下是我解决问题的方法:
@Bean
public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception {
return new MyMappingCouchbaseConverter(couchbaseMappingContext());
}
private class MyMappingCouchbaseConverter extends MappingCouchbaseConverter {
MyMappingCouchbaseConverter(MappingContext<? extends CouchbasePersistentEntity<?>, CouchbasePersistentProperty> mappingContext) {
super(mappingContext);
}
@Override
@SuppressWarnings("unchecked")
protected <R> R read(final TypeInformation<R> type, final CouchbaseDocument source, final Object parent) {
if (Object.class == typeMapper.readType(source, type).getType()) {
return (R) source.export();
} else {
return super.read(type, source, parent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2147 次 |
最近记录: |