【发布时间】:2015-01-25 00:10:26
【问题描述】:
我正在开发一个使用谷歌云服务的应用程序,我安装了一个本地开发服务器,今天我开发了 crud 的创建,代码如下:
Entity.Builder entRestaurante = Entity.newBuilder();
entRestaurante.setKey(makeKey());
entRestaurante.addProperty(makeProperty(ID, makeValue(restaurante.getId())));
entRestaurante.addProperty(makeProperty(CAMPUS, makeValue(restaurante.getId())));
entRestaurante.addProperty(makeProperty(NOME, makeValue(restaurante.getId())));
entRestaurante.addProperty(makeProperty(INICIO_HORARIO, makeValue(restaurante.getInicioHorario())));
entRestaurante.addProperty(makeProperty(FIM_HORARIO, makeValue(restaurante.getFimHorario())));
Mutation.Builder mutation = Mutation.newBuilder();
mutation.add(entRestaurante);
CommitRequest.newBuilder()
.setMutation(mutation)
.setMode(CommitRequest.Mode.NON_TRANSACTIONAL)
.build();
我认为这很好用,搜索对象 Mutation 我看到他有方法来完成我需要 addDelete、addUpdate 的其余部分:
1- 我该如何使用这些家伙?谁能给我看看?
我试着用这个来读取 crud:
public List<Restaurante> obtem(final Restaurante filtro) {
List<Restaurante> listaRetorno = new ArrayList<>();
List<Filter> filtros = new ArrayList<>();
try {
filtros.add(makeFilter(
ID, PropertyFilter.Operator.EQUAL, makeValue(filtro.getId())).build());
filtros.add(makeFilter(
CAMPUS, PropertyFilter.Operator.EQUAL, makeValue(filtro.getCampus())).build());
filtros.add(makeFilter(
NOME, PropertyFilter.Operator.EQUAL, makeValue(filtro.getNome())).build());
filtros.add(makeFilter(
FIM_HORARIO, PropertyFilter.Operator.EQUAL, makeValue(filtro.getFimHorario())).build());
filtros.add(makeFilter(
INICIO_HORARIO, PropertyFilter.Operator.EQUAL, makeValue(filtro.getInicioHorario())).build());
Filter enconteIgual = makeFilter(filtros).build();
Query.Builder query = Query.newBuilder();
query.addKindBuilder().setName(DATA_SET_NAME);
query.setFilter(enconteIgual)
.setLimit(1)
.build();
RunQueryRequest request = RunQueryRequest.newBuilder().setQuery(query).build();
RunQueryResponse response = datastore.runQuery(request);
for (EntityResult result : response.getBatch().getEntityResultList()) { //Here problem when try to read the values
Map<String, Value> props = getPropertyMap(result.getEntity());
String id = getString(props.get(ID));
String campus = getString(props.get(CAMPUS));
String nome = getString(props.get(NOME));
Date inicioHorario = obtenhaData(getString(props.get(INICIO_HORARIO)));
Date fimHorario = obtenhaData(getString(props.get(FIM_HORARIO)));
listaRetorno.add(new Restaurante(
id,
campus,
nome,
inicioHorario,
fimHorario));
}
if (response.getBatch().getMoreResults() == QueryResultBatch.MoreResultsType.NOT_FINISHED) {
ByteString endCursor = response.getBatch().getEndCursor();
query.setStartCursor(endCursor);
}
return listaRetorno;
} catch (DatastoreException ex) {
Logger.getLogger(RestauranteRepositoryImpl.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
但是 response.getBatch().getEntityResultList() 上的响应是一个例外 MORE_RESULTS_AFTER_LIMIT
2- 有谁知道这是什么反应?满足'select'的元素在哪里?
谢谢
【问题讨论】:
标签: java google-app-engine google-cloud-storage google-cloud-datastore google-cloud-platform