我正在使用java导出和导入Orient DB。我可以导出整个数据库。但是当我指定导出指定的类时,它只导出该类。子类不会导出。这是代码:
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();
这是假设是或者我做错了什么?
答案 0 :(得分: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 :(得分: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);
}
}
}