【问题标题】:how to create crud on google cloud storage如何在谷歌云存储上创建 crud
【发布时间】: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


    【解决方案1】:
    1. 您可以在Mutation.Builder 上使用addUpdate()addUpsert()addDelete()addInsert()addInsertAutoId() 方法来添加突变。您可以在Cloud Datastore documentation on working with entities 中找到一些如何使用这些方法的示例。

    2. 您的代码在这里做的是正确的事情。通过对RunQueryResponse.getBatch().getEntityResultList() 中的项目调用getEntity(),可以找到查询的结果。至于MORE_RESULTS_AFTER_LIMIT,即使没有其他结果(issue tracker),目前也可能返回。作为一种解决方法,您可以继续查询,直到收到一个结果为零的批次。

    【讨论】:

    • 我现在无法测试,但我认为这将解决我的问题,非常感谢(如果事实上它解决了我会支持你的建议)
    猜你喜欢
    • 2016-01-31
    • 2019-01-24
    • 2020-02-15
    • 2021-06-09
    • 2020-09-10
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多