3

我正在使用一个生成对象的框架,Node并且它们已经分配了一个 ID。现在需要将它们转换为在框架中控制的具有相同 ID 的 Titan 顶点(使用 访问node.id

public long addNode(Node node) {    
   TitanVertex vertex = (TitanVertex) g.addVertex(null);
   g.commit();

   vertex.setProperty(ID, node.id);
   vertex.setProperty(TYPE, node.type);
   vertex.setProperty(VERSION, node.version);
   vertex.setProperty(TIME, node.time);
   vertex.setProperty(DATA, node.data);
   ...

错误:

java.lang.IllegalArgumentException: Name is reserved: id

但它似乎不允许它。我应该使用一些假属性来模仿辅助身份吗?Titan有办法做到这一点吗?

谢谢!

4

2 回答 2

8

很少有图形数据库实际上允许您设置元素标识符。无论您使用的是 Neo4j、OrientDB、Titan 等,它们都倾向于拥有自己的 ID 系统。TinkerGraph 确实是唯一允许 ID 分配的蓝图实现。

如果您想保留您的 ID,则只需将其重命名为其他名称即可。也许您可以使用“iid”来代替“id”。为了使事情更透明,从编程的角度来看,您可能会考虑使用IdGraph包装器,它允许您执行以下操作:

gremlin> base = TitanFactory.open('/tmp/titan-berkley')
==>titangraph[local:/tmp/titan-berkley]
gremlin> g = new IdGraph(base, true, false)            
==>idgraph[titangraph[local:/tmp/titan-berkley]]
gremlin> g.addVertex(45)  
==>v[45]
gremlin> g.v(45)
==>v[45]

您可以看到IdGraph允许它看起来好像您正在分配元素 id 本身。在幕后,它实际上只是使用关键索引。

于 2013-07-01T10:51:01.730 回答
1

@Stephen,不能说 gremlin 终端,但是通过 Titan Java API 进行了尝试,但没有成功。即使在 id 图中创建顶点时传递了 id,默认 id 也被分配给节点。

于 2014-03-12T05:06:59.153 回答