如果您的数据模型具有嵌套类层次结构并且您使用的是SQL语法,则可以使用INSTANCEOF
运算符将结果过滤为仅扩展给定类的对象。但是,使用Java API,并且只给出了两个类名,有什么方法可以找出一个类是否使用Java API继承(扩展)另一个类?如果你遇到这样的情况,你不能只检查superClasses属性:
V ClassA
\ /
ClassB ClassC
\ /
ClassD
当你检索ClassD的超类时,你只会看到[ClassB,ClassC]。
答案 0 :(得分:1)
我使用JavaScript在OrientDB Studio中创建了一个函数,名为DoesClassHaveSuperClass()。它需要两个字符串参数,checkClass和superClass。它使用递归函数调用来处理嵌套类。
// DoesClassHaveSuperClass()
// Input parameters: string "checkClass", string "superClass"
// This function looks to see whether "checkClass" inherits from "superClass",
// either directly or indirectly.
var schema = orient.getDatabase().getMetadata().getSchema();
return hasSuperClass(schema, checkClass, superClass);
function hasSuperClass(schema, checkClass, superClass) {
var superClasses = schema.getClass(checkClass).getSuperClassesNames();
if (superClasses.contains(superClass)) {
return true;
}
else {
for (var i = 0, len = superClasses.length; i < len; i++) {
if (hasSuperClass(schema, superClasses[i], superClass)) {
return true;
}
}
}
return false;
}