2017-05-30 24 views
0

neo4jの自動インクリメント機能を実装する必要があります。 私は次のように(this answerにthaks)ユーザー定義の手順でそれをやった:ユーザー関数でneo4jの自動インクリメントを実装する方法

public class Sequence { 

public @Context GraphDatabaseService db; 

@Procedure(name = "sequence.id", mode = Mode.WRITE) 
@Description("sequence.id(name, length) - return next 'length' value(s) form sequence with name 'name'") 
public Stream<ListResult> sequence_id(@Name("name") final String name, 
             @Name(value = "length", defaultValue = "1") Long length) { 
    try (
     final Result results = db.execute(
      "WITH {length} as length\n" + 
       "MERGE (id:UniqueId{name:{name}})\n" + 
       "SET id.count = coalesce(id.count, 1) + length\n" + 
       "WITH length, id.count - length AS base\n" + 
       "UNWIND range(0, length - 1) AS idx\n" + 
       "RETURN collect(base + idx) AS value", with("name", name, "length", length))) { 

     return results.<List>columnAs("value").map(ListResult::new).stream(); 
    } 

    private Map<String, Object> with(String key1, Object value1, String key2, Object value2) { 
     Map<String, Object> map = new HashMap<>(); 
     map.put(key1, value1); 
     map.put(key2, value2); 
     return map; 
    } 
    ... 
} 

をしかし、私は正確に必要なのは同じ機能を持つ関数です。

機能でこれを行うにはどうすればいいですか?ユーザー定義関数からプロシージャーを呼び出すことは可能ですか?誰かが私に有用な例を教えてもらえますか?

おかげで、

答えて

0

User-defined functionsは、彼らがDBを変更することはできません。つまり、読み取り専用です。したがって、プロシージャはUniqueIdノードを更新するため、関数に変換することはできません。

関連する問題