Я использую 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]
, но когда я запускаю вершинную программу, которую мы создали для обхода и извлечения узлов, не извлекает мета-свойства, поэтому кто-нибудь может мне помочь в этом, пожалуйста. Если вы видите значения времени выполнения, мета-свойства не возвращаются.
после тщательной отладки, я обнаружил, что в классе 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» как ключ