使用java运行orient-db图有哪些不同的方法?

时间:2015-04-22 09:45:09

标签: java orientdb

让我们想象下面的图表:

enter image description here

假设每个Vertex都是一个类型“Account”,除了客户端是一个类型......“Client”或者其他什么。

假设Edge“监督”允许Boss访问其管理者的所有信息。 “框架”允许管理员访问其实习生的所有信息。 最后,belongs_to允许实习生查看客户信息。

从帐户开始,我想知道此帐户是否可以访问特定客户端。允许某些边缘的某些方向并禁止其他边缘......例如,可以通过边缘监督方式:OUT ---> IN但不是IN ---> OUT。

但是对于belongs_to,IN ---> OUT是可能的。

从Java做起,我在想一个递归函数,但在某些情况下可能很难避免冗余和无限递归,而且似乎需要管理很多条件。

从SQL命令我们可以做类似的事情:

SELECT EXPAND(SET(OUT('supervise').OUT('frames').IN('belongs_to'))) FROM #Boss_id

我认为它会返回一个客户列表,我们可以检查所需客户端的存在。但这只适用于老板,对于经理我只会这样做:

SELECT EXPAND(SET(OUT('frames').IN('belongs_to'))) FROM #Manager_id

我真的没有看到如何概括这个命令。

所以我的问题是:

是否有一种“简单”的方式来运行图形,Java API或任何推荐的方式?

1 个答案:

答案 0 :(得分:1)

create class Account extends V
create class Client extends V

create class Supervise extends E
create class Frames extends E
create class BelongsTo extends E


create vertex Account set name = 'boss'                 #12:0
create vertex Account set name = 'manager1'             #12:1
create vertex Account set name = 'manager2'             #12:2
create vertex Account set name = 'intern1'              #12:3
create vertex Account set name = 'intern2'              #12:4

create vertex Client set name = 'client1'               


create edge Supervise from #12:0 to [#12:1, #12:2]
create edge Frames from #12:2 to [#12:3, #12:4]
create edge BelongsTo from #13:0 to #12:4

我相信这是上述情况。 你可以:

select from (
    traverse out('Supervise'), out('Frames'), in('BelongsTo') from <rid>
) where @class = 'Client'

请注意,仅当您将 rid 替换为#12:0 #12:2时,才会返回 client1 #12:4