Titan Получение свойств вершины

Я создаю график в многопоточной среде и сталкиваюсь со странной ошибкой. Во время работы я иногда получаю сообщение об ошибке, что свойство, к которому я пытаюсь получить доступ, не существует.

java.lang.IllegalStateException: The property does not exist as it has no key, value, or associated element

Чтобы попытаться понять это, я поставил точку останова, когда произошла эта ошибка, и обнаружил какое-то странное поведение.

Когда я бегу:

Vertex vertex = graph.traversal().V(123).next();
vertex.properties();

Я вижу список всех ожидаемых свойств, например "PROP1", "PROP2" и "PROP3". Однако, когда я запускаю следующее:

vertex.property("PROP1").value();

Я получаю сообщение об ошибке, что свойство не существует. Еще более странно то, что vertex.property(xxx).value(); работает для других свойств "PROP2" и "PROP3". Что может привести к такому странному поведению?


person Filipe Teixeira    schedule 15.02.2016    source источник


Ответы (1)


Рекомендуется всегда проверять, прежде чем нажимать next().

Например,

traversal=graph.traversal().V(123);
if (traversal.hasNext()) // avoid fast no property exception here.
    vertex=traversal.next() 

Другое дело, что vertex.property("PROP1") может быть немного странным для получения значения. property() извлекает объект свойства, и я предполагаю, что это не то, что вам нужно, если он его не находит, он выдает исключение. Вместо этого лучший способ получить значение — через vertex.values("PROP1"). Это вернет null, если свойство не существует.

Ознакомьтесь с документацией здесь

person Mohamed Taher Alrefaie    schedule 15.02.2016
comment
Спасибо за ответ и хороший совет, но это не решает основную проблему. Использование values() вместо property() также вызывает исключение. Основная проблема заключается в том, что когда я перечисляю все ключи свойств, я вижу все, что ожидаю. то есть от "PROP1" до PROPN, но когда я запрашиваю значение с помощью vertex.value("PROP1") или vertex("PROP1"), я получаю исключение отсутствующего свойства. Кроме того, при использовании только vertex.values() я вижу все ожидаемые значения. То есть то, что должно быть возвращено vertex.value("PROP1") - person Filipe Teixeira; 15.02.2016