2015-10-21 48 views
0

这里是我每天OrientDB问题:OrientDB REST API ignoreError

是否有可能通过REST API一个批处理命令的执行过程中忽略的错误?

Error:com.orientechnologies.orient.core.exception.OCommandExecutionException: No edge has been created because no source vertices 

由于I:

我正在与命令等

CREATE EDGE ManagedBy FROM (SELECT FROM Employee WHERE account = '<theId>') TO (SELECT FROM Employee WHERE account = '<theId>') 

事实是,有时指定的帐户不是在DB,因此,我得到以下错误创建节点之间的边事实上,我无法创建一些边缘,我很想跳过返回的错误,以便插入尽可能多的边缘。

现在我一个一个插入边缘,我认为使用批量插入会加速很多过程。

+0

你得到哪些错误? – wolf4ood

+0

感谢propt回复:我得到'错误:com.orientechnologies.orient.core.exception.OCommandExecutionException:没有边缘已经创建,因为没有源顶点' – Alberto

+0

我不认为你可以跳过错误。你可以创建一个javascript服务器函数来执行bach插入操作,在那里你可以检查目标是否是empy,你只需跳过边缘创建 – wolf4ood

回答

0

最后,我遵循@ wolf4ood的建议:我创建了一个insert_edge JS服务器函数,我称它为每个我想创建的边。 如果目标和源节点存在,则创建边缘,否则不采取任何操作。这里是它的身体:

var g = orient.getGraph(); 
var fromQ = "SELECT FROM " + fromTable + " WHERE " + fromField + " = '" + fromValue + "';"; 
var toQ = "SELECT FROM " + toTable + " WHERE " + toField + " = '" + toValue + "';"; 

var from = g.command('sql', fromQ, []); 
var to = g.command('sql', toQ, []); 

if(from.length > 0 && to.length > 0) { 
    var createQ = "CREATE EDGE " + edgeType + " FROM (SELECT FROM " + fromTable + " WHERE " + fromField + " = '" + fromValue + "')" + " TO (SELECT FROM " + toTable + " WHERE " + toField + " = '" + toValue + "');"; 

    return g.command('sql', createQ, []); 
} 

return null; 

参数是fromTable, fromField, fromValue, sourceTable, sourceField, sourceValue, edgeType。 我叫这样的功能:

SELECT insert_edge('Employee', 'account', <theId>, 'Employee', 'account', <theManager>, 'ManagedBy')