Как ограничить глубину разбора с помощью Tinkerpop Frames
Привет у меня есть интерфейс и соответствующий класс реализации, как:
public interface IActor extends VertexFrame {
@Property(ActorProps.nodeClass)
public String getNodeClass();
@Property(ActorProps.nodeClass)
public void setNodeClass(String str);
@Property(ActorProps.id)
public String getId();
@Property(ActorProps.id)
public void setId(String id);
@Property(ActorProps.name)
public String getName();
@Property(ActorProps.name)
public void setText(String text);
@Property(ActorProps.uuid)
public String getUuid();
@Property(ActorProps.uuid)
public void setUuid(String uuid);
@Adjacency(label = RelClasses.CoActors, direction = Direction.OUT)
public Iterable<IActor> getCoactors();
}
И я использую OrientDB с ним, который выглядит примерно так. У меня была похожая реализация с Neo4j:
Graph graph = new OrientGraph("remote:localhost/actordb");
FramedGraph<Graph> manager = new FramedGraphFactory().create(graph);
IActor actor = manager.frame(((OrientGraph)graph).getVertexByKey("Actor.uuid",uuid), IActor.class);
Выше работает, но проблема в том, что в этом случае или аналогичном, потому что существует связь между двумя вершинами класса Actor, потенциально может быть петля графа. Есть ли способ определить с помощью Annotation или каким-либо другим способом (например, через Manager) остановиться после x шагов для конкретной @Adjacency, чтобы это не продолжалось вечно? Если ответ @GremlinGroovy ( https://github.com/tinkerpop/frames/wiki/Gremlin-Groovy) является ответом, не могли бы вы привести пример?
1 ответ
Я не уверен, что понимаю вопрос / проблему. (Вы говорите "потенциально", но на самом деле не доказали, что есть проблема!)
- Проблема в том, что в Vertex/Frames есть цикл, и (вы думаете) загрузка объекта приведет к бесконечному циклу?
- Удалось ли вам доказать, что существует проблема загрузки вершины / фрейма с помощью цикла? (покажи мне код / проблему)
Насколько я понимаю, трубопроводы будут lazy-load
объекты (загружать только тогда, когда требуется). Кадры (я представляю) загружают только соседние кадры, когда это требуется. На самом деле, насколько я могу судить, проблем нет.
Пример (Groovy)
// create some framed vertices
Person nick = createPerson(name: 'Nick')
Person michail = createPerson(name: 'Michail')
// create a recursive loop
nick.addKnows(michail)
michail.addKnows(nick)
// handles recursion = true!
Person nick2 = framedGraph.getVertex(nick.asVertex().id, Person)
assert nick2.knows.knows.knows.knows.knows.name == 'Michail'