2015-04-01 19 views
0

Im使用java導出和導入Orient DB。我可以導出整個數據庫。但是,當我指定導出指定的類時,僅導出該類。子類不會被導出。這裏是代碼:Orient DB - 使用JAVA導出指定類的子類

ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/sampleDataBase").open("admin", "admin"); 

ODatabaseExport export = new ODatabaseExport(db, "DataCont/FinalTry.gz", listener); 

Set<String> a= new HashSet<String>(); 
a.add("Employee".toUpperCase()); 

export.setIncludeClasses(a); 

export.exportDatabase(); 
export.close(); 

那麼這是假設是或我做錯了什麼?

回答

1

檢查ODatabaseExport的源代碼看起來好像只採用與setIncludeClasses()指定的類型完全相同的集羣/記錄。例如,在exportRecords()

ODocument doc = (ODocument) rec; 
final String className = doc.getClassName() != null ? doc.getClassName().toUpperCase() : null; 
if (includeClasses != null) { 
    if (!includeClasses.contains(className)) 
     continue; 
} else if (excludeClasses != null) { 
    if (excludeClasses.contains(className)) 
     continue; 
} 

他們在該類其他幾個地方類似的檢查。這意味着你需要把你想要導出的所有類放入a

1

如果要導出所有子類也可以添加這段代碼:

 Set<String> classesToExport = new HashSet<>(); 
     classesToExport.add("Employee".toUpperCase()); 

     OSchema oSchema = db.getMetadata().getSchema(); 
     for (String className : classesToExport) { 
      OClass clazz = oSchema.getClass(className); 
      for(OClass subClass : clazz.getAllBaseClasses()){ 
       //String subClassName = subClass.getName(); 
       String subClassName = subClass.getName().toUpperCase(); 
       if(!classesToExport.contains(subClassName)){ 
        classesToExport.add(subClassName); 
       } 
      } 

     } 
+0

那不似乎工作....仍然打印指定的類 – Vithushan 2015-04-01 09:11:24

+0

一個'.toUpperCase()'失蹤,抱歉。查看更新。 – vitorenesduarte 2015-04-01 09:28:54

+0

小問題:這是抽象類的子類還是帶有其他類的鏈接的類?感謝您的時間... – Vithushan 2015-04-01 09:58:48