【发布时间】:2016-06-09 07:06:25
【问题描述】:
我在 couchbase-server-enterprise_4.1.0-ubuntu14.04_amd64 上使用 JsonDocument inserted = bucket.insert(doc);。
究竟发生了什么,我触发了这个 insert 命令,并且在这个成功时我触发了同一文档上的 Select 命令。此 Select 命令不返回更新条目,而是仅返回旧条目。当我在 Select 之前使用调试器时(在 insert 之后等待几秒钟,然后调用 Select)它工作得很好。所以我认为 insert 的行为是异步的,不确定。
我检查的另一件事是 upsert 而不是 insert,它也不起作用。但是,当我执行 bucket.replace(doc) 然后调用 Select 时,它会返回更新后的结果。我已经尝试显式使用 bucket.async().insert(doc) 和使用 toBlocking().single() ,这也失败了。
是 insert/upsert 的问题还是我做错了什么。
下面是我的一些代码 sn-p ::
@Override
public T save(T entity, String username) {
String id = generateId(entity);
JsonObject data = JsonObject.fromJson(getContent(entity));
data.removeKey(ID);
data.put(TYPE, klass.getSimpleName());
data.put(CREATED_AT, new Date().getTime());
data.put(CREATED_BY, username);
data.put(MODIFIED_AT, new Date().getTime());
data.put(MODIFIED_BY, username);
data.put(ACTIVE, true);
T persistedEntity = getEntity(bucket.insert(JsonDocument.create(id, data)));
return persistedEntity;
}
@Override
public List findAll() {
Statement query = selectAll().where(typeExpression()).orderBy(Sort.desc(x(CREATED_AT)));
return getEntities(query);
}
protected AsPath selectAll() {
return Select.select("meta().id, *").from(i(bucket.name()));
}
【问题讨论】:
标签: java asynchronous couchbase nosql