Фреймы Tinkerpop: запрос вершин на основе типа интерфейса

Я использую Tinkerpop Frames создать набор вершин и ребер. Добавить новую вершину просто, но получение вершин, основанных на типе, кажется немного сложным.

Предположим, у меня есть класс A а также B и я хочу добавить новый так:

framedGraph.addVertex(null, A.class);
framedGraph.addVertex(null, B.class);

Это прямо вперед. Но что, если я хочу получить все вершины с типом A?

Сделать это не удалось, потому что он вернул все вершины (оба A а также B).

framedGraph.query().vertices(A.class);

Есть ли возможный способ сделать это. Я попытался проверить документацию и контрольные примеры без удачи. Как я могу получить список вершин типа A только

1 ответ

Этот вопрос выглядит так, как будто он является дубликатом - Как найти вершины определенного класса с помощью фреймов Tinkerpop (также задаваемых сегодня).

Насколько я понимаю, фреймворк Tinkerpop Frame действует как класс-оболочка для вершины. Вершина фактически не сохраняется как класс интерфейса. Поэтому нам нужен способ идентифицировать вершину как type,

Мое решение я добавил @TypeField а также @TypeValue аннотации к моим классам Frame. Затем я использую эти значения для запроса моего FramedGraph,

Документацию для этих аннотаций можно найти здесь: https://github.com/tinkerpop/frames/wiki/Typed-Graph

Пример кода

@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }

Затем определите FramedGraphFactory добавляя TypedGraphModuleBuilder как это.

static final FramedGraphFactory FACTORY = new FramedGraphFactory(
    new TypedGraphModuleBuilder()
        .withClass(Person.class)
        //add any more classes that use the above annotations. 
        .build()
);

Затем получить вершины типа Person

Iterable<Person> people = framedGraph.getVertices('type', 'person', Person.class);

Я не уверен, что это наиболее эффективное / лаконичное решение (хотелось бы посмотреть, что предлагает @stephen mallette). Это в настоящее время не доступно, но было бы логично иметь возможность сделать что-то вроде:

// framedGraph.getVertices(Person.class)
Другие вопросы по тегам