Дграф на Яве. Как запустить запрос необработанной строковой мутации? - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно иметь возможность запускать запросы необработанных строковых мутаций без использования newBuilder ():

Gson gson = new Gson();
String json = gson.toJson(newEmployer);
Transaction newTransaction = this.dgraphClient.newTransaction();
Mutation mu = Mutation.newBuilder().setSetJson(ByteString.copyFromUtf8(json.toString())).build();
newTransaction.mutate(mu);

Я хочу запустить:

String email = "ba@a.aa";
String userType = "JOB_SEEKER";
Transaction newTransaction = this.dgraphClient.newTransaction();
String query = 
        "{\n" +
        "    set { \n" +
        "       _:user <label> \"USER\" . \n" +
        "      _:user <userType> \"" + email + "\" . \n" +
        "      _:user <email> \"" + userType + "\" . \n" +
        "    }\n" +
        "}";
Mutation mu = Mutation.parseFrom(ByteString.copyFromUtf8(query));
newTransaction.mutate(mu);

Но я получаю сообщение об ошибке во время выполнения: «При синтаксическом анализе сообщения протокола ввод неожиданно завершился в середине поля. Это может означать, что вход был усечен или что во встроенном сообщении неверно указана его длина . "

Ответы [ 2 ]

1 голос
/ 12 июня 2019

При настройке N-четырехкратных троек для мутаций в клиентах gRPC, таких как dgraph4j, вам нужно только указать сами тройки, разделенные новой строкой, и передать их Mutation#setSetNquads. Они не окружены set. Другими словами, вместо этого:

{
  set {
    _:user <label> "USER" .
    _:user <userType> "USER_TYPE" .
    _:user <email> "ba@a.aa" .
  }
}

Вам нужны только тройки:

_:user <label> "USER" .
_:user <userType> "USER_TYPE" .
_:user <email> "ba@a.aa" .

Вот как это будет выглядеть в вашем коде Java:

String email = "ba@a.aa";
String userType = "JOB_SEEKER";
Transaction newTransaction = this.dgraphClient.newTransaction();
String triples = 
        "_:user <label> \"USER\" .\n" +
        "_:user <userType> \"" + email + "\" .\n" +
        "_:user <email> \"" + userType + "\" .";
Mutation mu =
    Mutation.newBuilder()
        .setSetNquads(ByteString.copyFromUtf8(triples))
        .build();
Assigned assigned = newTransaction.mutate(mu);

Первый формат мутаций с { set { ... } } предназначен для клиентов HTTP, который включает мутации в Dgraph Ratel или с curl.

Дополнительная информация о мутациях Dgraph доступна в документации по мутациям: https://docs.dgraph.io/mutations/

0 голосов
/ 14 июня 2019

Я нашел какое-то решение, оно не строковое, но оно работает.

JSONObject query = new JSONObject();
query.put("label", "USER");
query.put("userType", userType);
query.put("email", email);
Mutation mu = Mutation.newBuilder().setSetJson(ByteString.copyFromUtf8(query.toJSONString())).build();
...