保存到新群集会返回错误

时间:2015-04-28 12:44:44

标签: orientdb

我在xtend / Java

中动态创建群集
for (int i : 0 ..< DistributorClusters.length) {
    val clusterName = classnames.get(i) + clusterSuffix;
    database.command(
                new OCommandSQL('''ALTER CLASS «classnames.get(i)» ADDCLUSTER «clusterName»''')).execute();
        }

然后我创建我添加oRole并将安全性授予新oRole

val queryOroleCreation = '''INSERT INTO orole SET name = '«clusterSuffix»', mode = 0, inheritedRole = (SELECT FROM orole WHERE name = 'Default')''';
        val ODocument result = database.command(new OCommandSQL(queryOroleCreation)).execute();
        for (int i : 0 ..< classnames.length) {
            database.command(
                new OCommandSQL(
                    '''GRANT ALL ON database.cluster.«classnames.get(i)»«clusterSuffix» TO «clusterSuffix»''')).
                execute();
        }

最后,我尝试将JsonObject保存到新创建的群集之一。我检查了数据库并且群集已存在。

        val doc = new ODocument();
        doc.fromJSON(jsonToSave.toString());

        val savedDoc = database.save(doc, "ClassName"+clusterSuffix);
        database.commit();

但Orient返回以下错误:

SEVERE: java.lang.IllegalArgumentException: Cluster name 'cluster:ClassNameclusterSuffix' is not configured

我的问题: 是什么导致了这种例外您可以为创建的新集群添加值吗?

修改

doc对象包含对其他类的引用。即:

{
    @class:"Customer",
    @version:0,
    name:"Kwik-E-Mart",
    user : {
        @class:"User",
        @version:0,
        username: "Apu",
        firstName:"Apu",
        lastName:"Nahasapeemapetilon"
    }
}

用户在默认群集中创建,但customer会抛出异常。

2 个答案:

答案 0 :(得分:0)

您应该删除“cluster:”部分。该方法的第二个参数是“要保存的集群的名称”,它不需要任何特殊的前缀。

所以:

val savedDoc = database.save(doc, "ClassName"+clusterSuffix);

应该正常工作

答案 1 :(得分:0)

我发现使用查询工作正常source

以下代码首次尝试使用:

val query = '''INSERT INTO ClassNameCLUSTER «"ClassName"+clusterSuffix» CONTENT «jsonToSave.toString()»'''
val ODocument savedDoc = database.command(new OCommandSQL(query)).execute();