2016-10-21 4 views
1

データモデルのネストされたクラス階層があり、SQL構文を使用している場合は、INSTANCEOF演算子を使用して、結果を特定のクラスを拡張するオブジェクトのみにフィルタできます。しかし、Java APIを使用して、2つのクラス名のみを指定すると、Java APIを使用して、あるクラスが別のクラスを継承(拡張)するかどうかを調べる良い方法はありますか?あなたはこのような状況を持っている場合、あなただけのスーパークラスプロパティをチェックすることはできません。OrientDBでは、あるクラスがJava APIの別のクラスを継承するかどうかを調べる方法は?

V    ClassA 
    \   /
    ClassB ClassC 
     \ /
     ClassD 

あなたがClassDのスーパークラスを取得する場合、あなただけの[ClassBの、クラスC]が表示されます。

答えて

1

JavaScriptを使用してDoesClassHaveSuperClass()という名前でOrientDB Studioに関数を作成しました。 checkClassとsuperClassという2つの文字列パラメータが必要です。これは、再帰関数呼び出しを使用してネストされたクラスを処理します。

// 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; 
} 
関連する問題