通过带有 java 的 orient-db 图 运行 有哪些不同的方法?

What are the different ways to run through an orient-db graph with java?

让我们想象下图:

让我们假设每个顶点都是一种类型 "Account",除了客户端是一种类型..."Client" 或其他类型。

假设 Edge "supervise" 允许老板访问其经理的所有信息。 "frames" 允许经理访问他的实习生的所有信息。 最后,belongs_to允许实习生查看客户信息。

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

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

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

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

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

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

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

我真的不知道如何概括这个命令。

所以我的问题是:

是否有 "easy" 方式通过图表 运行,Java API 或任何推荐的方式?

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[= 时,才会返回 client1 21=]、#12:2#12:4.