Как получить мета-свойства, определенные для свойства вершины в java коде? - PullRequest
3 голосов
/ 14 февраля 2020

Я использую DB графа Janus, и мы возвращаем пользовательскую вершинную программу для извлечения данных из графа Janus, и мы используем библиотеки зарождения искры, я создал одну вершину и определил свойства и для одного свойства, определенного мета-свойством, во время кода выполнение видит вершину и ее свойства, и, но я не могу увидеть мета-свойство, какая-либо идея, пример кода java, как мы можем получить мета-свойства?

@ KelvinLawrence из консоли gremlin, я добавил мета-свойства, как показано ниже. сначала я создал узел, как показано ниже

g.addV('Student').property('JoinedDate','2016-12-04').property('NodeType','Student').property('NodeSubType','MGMT_QUOTA').property('Id','1018407494687220').property('Names','LMUXm3VVEXcZWOPn1SN9tB/i89vGwRezRnZhwcgbnGg=').property('AddressId','223433849632287061').property('AccountType','41').property('NodeScore','0.7').as('c1')

, затем я добавил мета-свойство, как показано ниже

g.V('4152').properties('NodeType').hasValue('Student').property('acl','private'), я даже подтвердил в консоли gremlin, что это мета-свойство успешно добавлено

g.V('4152').properties('NodeType').hasValue('Student').properties()

выводится как ==>p[acl->private], но когда я запускаю вершинную программу, которую мы создали для обхода и извлечения узлов, не извлекает мета-свойства, поэтому кто-нибудь может мне помочь в этом, пожалуйста. Если вы видите значения времени выполнения, мета-свойства не возвращаются.

enter image description here

после тщательной отладки, я обнаружил, что в классе JanusGraphVertexDeserializer мы имеем

if (!((InternalRelationType)type).isInvisibleType()) {
                            if (type.isPropertyKey()) {
                                Object value = relation.getValue();
                                Preconditions.checkNotNull(value);
                                Cardinality card = this.getPropertyKeyCardinality(type.name());
                                tv.property(card, type.name(), value, new Object[]{T.id, relation.relationId});

здесь строка ниже приводит к добавлению мета-свойств к свойству вершины

tv.property (card, type.name (), value, new Object [ ] {T.id, ratio.relationId});

когда я отлаживал больше, я видел, что он пытается добавить класс ElementHelper в следующем методе

public static void attachProperties(final Element element, final Object... propertyKeyValues) {
        if (null == element) {
            throw org.apache.tinkerpop.gremlin.structure.Graph.Exceptions.argumentCanNotBeNull("element");
        } else {
            for(int i = 0; i < propertyKeyValues.length; i += 2) {
                if (!propertyKeyValues[i].equals(T.id) && !propertyKeyValues[i].equals(T.label)) {
                    element.property((String)propertyKeyValues[i], propertyKeyValues[i + 1]);
                }
            }

        }
    }

если вы видите условие if

if (! propertyKeyValues ​​[i] .equals (T.id) &&! propertyKeyValues ​​[i] .equals (T.label))

ключ мета-свойства не должен быть «id», «label», здесь проблема, если разработчик, написавший этот код, не разрешает «id» и «label», то почему в приведенном выше классе разработчик пытается передать «id» как ключ

...