2015-09-14 3 views
2

Я не уверен, что это проблема с ошибкой OrientDB или оператора. В приведенном ниже коде я ожидаю создать новые экземпляры Person, однако новые вершины не будут выполняться как объекты Person, а скорее попадают в коллекцию V.Добавить вершину в рамку в OrientDB

Это частично было адресовано here, однако это использовало TinkerGraph, где я использую OrientGraph. Согласно комментарию на связанной странице, я считаю, что то, что я сделал, должно работать. Есть что-то, чего я не хватает?

package simpleFrames; 

import com.tinkerpop.frames.Property; 
import com.tinkerpop.frames.VertexFrame; 

public interface Person extends VertexFrame { 

    @Property("firstName") 
    public void setFirstName(String name); 

    @Property("firstName") 
    public String getFirstName(); 

} 

.

package simpleFrames; 

import java.io.IOException; 

import com.orientechnologies.orient.client.remote.OServerAdmin; 
import com.orientechnologies.orient.core.metadata.schema.OType; 
import com.tinkerpop.blueprints.Vertex; 
import com.tinkerpop.blueprints.impls.orient.OrientGraph; 
import com.tinkerpop.blueprints.impls.orient.OrientGraphFactory; 
import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx; 
import com.tinkerpop.blueprints.impls.orient.OrientVertexType; 
import com.tinkerpop.frames.FramedGraph; 
import com.tinkerpop.frames.FramedGraphFactory; 
import com.tinkerpop.frames.modules.javahandler.JavaHandlerModule; 

public class go { 

    static String remote = "localhost"; 
    static String database = "muck"; 
    static String username = "admin"; 
    static String password = "admin"; 
    static String rootPassword = "root"; 

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { 

     String location = String.format("remote:%s", remote); 
     String fullDatabaseName = String.format("%s/%s", location, database); 

     OServerAdmin admin = new OServerAdmin(location); 
     try { 
      admin.connect("root", rootPassword); 
      admin.createDatabase(fullDatabaseName, "graph", "memory"); 

     } finally { 
      admin.close(); 
     } 

     OrientGraphFactory factory = new OrientGraphFactory(fullDatabaseName, username, password); 
     try { 
      OrientGraphNoTx noTx = factory.getNoTx(); 
      try { 
       OrientVertexType person = noTx.createVertexType("Person"); 
       person.createProperty("firstName", OType.STRING); 

       noTx.commit(); 

      } finally { 
       noTx.shutdown(); 
      } 

      OrientGraph graph = factory.getTx(); 
      try { 
       FramedGraph<OrientGraph> framedGraph = new FramedGraphFactory(new JavaHandlerModule()).create(graph); 

       Person mark = framedGraph.addVertex(null, Person.class); 
       mark.setFirstName("Mark"); 

       Person frank = framedGraph.addVertex(null, Person.class); 
       frank.setFirstName("Frank"); 

       graph.commit(); 

       /* Records are going in as V */ 
       for (Vertex v : graph.getVerticesOfClass("V")) { 
        Person person = framedGraph.frame(v, Person.class); 
        System.out.println(String.format("Vertex: %s", person.getFirstName())); 
       } 

       /* They are NOT going in as Person */ 
       for (Vertex v : graph.getVerticesOfClass("Person")) { 
        Person person = framedGraph.frame(v, Person.class); 
        System.out.println(String.format("Person: %s", person.getFirstName())); 
       } 
      } finally { 
       graph.shutdown(); 
      } 

     } finally { 
      factory.close(); 
      OServerAdmin admin2 = new OServerAdmin(fullDatabaseName); 
      try { 
       admin2.connect("root", rootPassword); 
       admin2.dropDatabase(database); 
      } finally { 
       admin2.close(); 
      } 
     } 
    } 
} 

ответ

1

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

При вызове ...

FramedGraph<OrientGraph>.addVertex(Object id, Class<F> kind) 

... первый параметр используется для нескольких целей (престижность тех, кто на самом деле может найти это в документации!). Параметр 'kind' здесь фактически не влияет на то, какой класс в базе данных используется для хранения данных, а скорее должен выглядеть так:

framedGraph.addVertex("class:Person", Person.class); 
Смежные вопросы