2015-10-21 81 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')