有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JAVA定向指定类的DB导出子类

我正在使用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) 个答案

  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);
                    }
                }
    
            }
    
  2. # 2 楼答案

    检查源代码中的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集中