2016-03-25 8 views
0

Hier in Orientdb hinzuzufügen ist mein Code:Begegnung Warnung, wenn Rand

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 ist eine Momentaufnahme des gleiche.

Und dann traf ich this Warnung:

ACHTUNG: Der Befehl ‚Kantentyp erstellen‚weiß‘als Unterklasse von‚E‘‘ muss außerhalb einer aktiven Transaktion ausgeführt werden: Die Transaktion wird sein verpflichtet und wieder öffnen gleich danach. dieses Verhalten ausführen es außerhalb einer Transaktion (db = test)

Googeln dieses Problem zu vermeiden, scheint es, dass diese Frage auf die nicht-Transaktionen und Transaktionsdatenbanken Operationen relevant ist.

Antwort

2

Sie arbeiten Schema weniger, also erstellt OrientDB Klassen für Sie beim ersten Erstellen von Scheitelpunkten/Kanten. In diesem Fall war es für die Edge-Klasse "weiß". Sie können dies vermeiden, indem Sie Klassen am Anfang oder außerhalb des Transaktionsbereichs erstellen. Versuchen Sie, dies vor Ihrem Code nur einmal auszuführen:

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

Vielen Dank für Ihre Antwort. Und ich verstehe, dass das OrientGraphNoTx anstelle des OrientGraph verwendet werden sollte. Jetzt stoße ich auf eine andere Frage. Ich benutzte die graph.addEdge ("weiß"), aber eine Ausnahme erhebt sich, dass "Klasse weiß bereits in der aktuellen Datenbank existiert". Anscheinend würde das Aufrufen der API addEdge immer die Erstellung der Klasse verursachen. Also, wie sollte ich es vermeiden am Anfang Klassen zu erstellen? – Qinger