У меня есть схема менее класс в моем OrientDB, скажем, это называется «TestClass», это довольно просто и содержит 1 булево свойство:OrientDB: ОБНОВЛЕНИЕ результат запроса в распределенном режиме
{
lock : 'true'
}
Когда я выполнить обновление запрос с помощью консоли или веб-интерфейс:
update testClass set lock = true
я получил
Updated record(s) '1' in 0.033000 sec(s).
из консоли и аналогичного результата из веб-сайтов.
Тот же результат я получил, когда я выполнить следующий код Java
ODatabaseDocumentTx db = ... // open db connection
Object result = db.command(new OCommandSQL("update testClass set lock = true")).execute()
«результат» переменная типа Integer и содержит число обновленных записей.
Но все меняется, когда сервер OrientDB запускается в распределенном режиме (у меня есть 3 узла). Выполнение одного и того же запроса с консоли создает:
Updated record(s) '[null]' in 0.010000 sec(s).
Как вы можете видеть, теперь результатом является массив, и он пуст. То же самое я получил от Java - переменная «result» имеет тип ArrayList и пуста. Самый интересный результат показывает web ui - когда я выполняю тот же запрос, у меня есть столбец «[1]» в столбце «значение», что означает, что, как я полагаю, этот результат является массивом и содержит 1 целочисленное значение «1», ,
Является ли это признаком или ошибкой? Что я делаю не так?
Я думаю, что это связано с тем, в распределенном режиме вы получили результат «уменьшить», но неизвестный разум не управляется корректно в консоли. Обновлена ли запись? – Lvca
Да, запись в БД обновляется. Самое главное для меня было получить количество обновленных записей в Java-коде, потому что я попытался реализовать простую оптимистичную блокировку для распределенного приложения. Исходным запросом было «update testClass set lock = true, где lock = false» – Tim
Это исправлено в последней ветви 2.1.x. – Lvca