使用 OrientDB 的 'astar' 函数:在 Java 中调用 SQL

Using the 'astar' function of OrientDB: an SQL call in Java

我正在使用 OrientDB 来表示大型城市地图,并在需要时计算一对节点之间的最短遍历时间。我有以下方法:

public void getShortestPath(int from, int to){
    String query = "SELECT astar(?, ?, time, direction=OUT, customHeuristicFormula=EUCLIDEAN) FROM V";
    OResultSet set = db.query(query, getNode(from).getProperty("@rid"), getNode(to).getProperty("@rid"));
}

getNode(nodeID) 方法 returns OVertex 对象存在于数据库中,因此我们可以识别 @rid。显然,这种方法没有任何用处。

我的问题是在尝试调用数据库上的 astar 查询时出现的(即方法的第二行)。我收到以下错误: OCommandSQLParsingException: Error parsing query 到达第一个 ( (即遇到左括号时出错)。完全删除括号只会导致第一个 @rid 值前面的 # 发生相同的错误。

我似乎找不到任何在实践中使用此函数的示例,并且(至少我认为)我正在使用 the documentation 建议的函数调用。期待听到您的想法。

我使用的是最新版本的 OrientDB:3.2.3

原来错误与括号本身无关。将 "direction='OUT'""customHeuristicFormula='EUCLIDEAN'" 参数作为字符串的一部分传递是问题所在。下面的代码块成功了。

    String sql = "SELECT ASTAR(" + getNode(from).getProperty("@rid") + ", " + getNode(to).getProperty("@rid") + ", time) FROM V";
    try(OResultSet set = db.query(sql, "direction='OUT'", "customHeuristicFormula='EUCLIDEAN'")) {
         // some code...
    }