Предупреждение об обнаружении при добавлении края в OrientDB

Вот мой код:

 OrientVertex luca = graph.addVertex(null);
 luca.setProperty("name", "John" + Integer.toString(i));

 OrientVertex marko = graph.addVertex(null);
 marko.setProperty("name", "Van Ness Ave." + Integer.toString(i + 1));

 OrientEdge lucaKnowsMarko = graph.addEdge(null, luca, marko, "knows");
 graph.commit();

Вот снимок того же.

И затем я столкнулся с этим предупреждением:

ВНИМАНИЕ: Команда «создать тип ребра «знает» как подкласс «E» должна выполняться вне активной транзакции: транзакция будет зафиксирована и повторно открыта сразу после нее. Чтобы избежать такого поведения, выполните его вне транзакции (db=test)

Погуглив эту проблему, кажется, что этот вопрос имеет отношение к операциям с нетранзакционными и транзакционными базами данных.


person Qinger    schedule 25.03.2016    source источник


Ответы (1)


Вы меньше работаете со схемой, поэтому OrientDB создает для вас классы при первом создании вершин/ребер. В данном случае это было для класса Edge, который «знает». Этого можно избежать, создав классы в начале или, тем не менее, вне области транзакции. Попробуйте выполнить это перед вашим кодом, только один раз:

OrientGraphNoTx graph = new OrientGraphNoTx(url);
graph.createEdgeType("knows");
graph.shutdown();
person Lvca    schedule 25.03.2016
comment
Спасибо за Ваш ответ. И я понимаю, что вместо OrientGraph следует использовать OrientGraphNoTx。 Теперь у меня возникает другой вопрос. Я использовал graph.addEdge («знает»), но возникает исключение, что класс знает, что он уже существует в текущей базе данных. Казалось бы, вызов API addEdge всегда будет вызывать создание класса. Итак, как мне избежать создания классов в начале? - person Qinger; 28.03.2016