0

Java OGM for Neo4j を使用して、そのパスの最後のノードをロックしてパスを選択しようとしています。

サイファーでそれを行うために、次のクエリを作成しました。

String q = "Match path = (p:Root) - [*1..100]-(m:Leaf) WHERE m.State = 'Non-Processed' WITH m,p,path ORDER BY length(path) Limit 1 SET m.State = 'Processing' RETURN path"

State最後のリーフをロックして(プロパティを変更して)必要なパスを選択します。

ただし、このクエリを実行しようとすると:

session.query(Path.class, q, propertyMap)

私は得るjava.lang.RuntimeException: query() only allows read only cypher. To make modifications use execute()

これを行う適切な方法は何ですか?

4

2 に答える 2

1

session.query() に制限のある古いバージョンの neo4j-ogm を使用している可能性があります。neo4j-ogm 1.1.4 にアップグレードしてください

于 2016-01-01T05:05:24.853 に答える
0

(おそらく最善ではない)解決策を見つけました。

String uid = UUID.randomUUID().toString();
String lockQuery = "Match path = (p:Root) - [*1..100]-(m:Leaf)"
   + "WHERE m.State = 'Non-Processed' "
   + "WITH m,p,path ORDER BY length(path) Limit 1 SET m.lock = " + uid
session.execute(lockQuery);
String getQuery = "Match path = (p:Root) - [*1..100]-(m:Leaf)"
   + "WHERE m.lock = " + uid + "RETURN path";
Path path = session.query(Path.class, getQuery, new Hashmap<String, Object>());

これは機能しますか?

于 2015-12-29T11:52:22.320 に答える