Orient DB - 使用JAVA导出指定类的子类

时间:2015-04-01 07:16:50

标签: java export orientdb

我正在使用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();

这是假设是或者我做错了什么?

2 个答案:

答案 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);
                }
            }

        }