2016-03-25 2 views
0

Вот мой код:предупреждение Encounter, когда добавить края в 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(); 

Here представляет собой снимок того же самого.

А потом я встретил this предупреждение:

ПРЕДУПРЕЖДЕНИЕ: Команда «создать краевую типа„знает“, как подкласс„E“» должна быть выполнена вне активной сделки: сделка будет быть совершенные и вновь открывающиеся после этого. Чтобы избежать этого поведения выполнить его вне транзакции (дБ = тест)

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

ответ

2

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

OrientGraphNoTx graph = new OrientGraphNoTx(url); 
graph.createEdgeType("knows"); 
graph.shutdown(); 
+0

Спасибо за ваш ответ. И я понимаю, что OrientGraphNoTx следует использовать вместо OrientGraph. Теперь у меня возникает другой вопрос. Я использовал graph.addEdge («знает»), но возникает исключение, что «класс уже существует в текущей базе данных». По-видимому, вызов API-интерфейса addEdge всегда будет приводить к созданию класса. Итак, как мне избежать создания классов в начале? – Qinger

Смежные вопросы