Neo4j Java OGM select 带锁
Neo4j Java OGM select with lock
我正在尝试 select 一条路径,并使用 Java Neo4j 的 OGM 锁定该路径中的最后一个节点。
为了在密码中做到这一点,我编写了以下查询:
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"
它 select 是锁定最后一个叶子的必要路径(通过更改其 State
属性)。
但是,当我尝试执行此查询时:
session.query(Path.class, q, propertyMap)
我得到一个 java.lang.RuntimeException: query() only allows read only cypher. To make modifications use execute()
执行此操作的正确方法是什么?
找到了(可能不是最好的)解决方案。
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>());
这行得通吗?
您可能使用的是旧版本的 neo4j-ogm,它对 session.query() 有限制。请升级到 neo4j-ogm 1.1.4
我正在尝试 select 一条路径,并使用 Java Neo4j 的 OGM 锁定该路径中的最后一个节点。
为了在密码中做到这一点,我编写了以下查询:
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"
它 select 是锁定最后一个叶子的必要路径(通过更改其 State
属性)。
但是,当我尝试执行此查询时:
session.query(Path.class, q, propertyMap)
我得到一个 java.lang.RuntimeException: query() only allows read only cypher. To make modifications use execute()
执行此操作的正确方法是什么?
找到了(可能不是最好的)解决方案。
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>());
这行得通吗?
您可能使用的是旧版本的 neo4j-ogm,它对 session.query() 有限制。请升级到 neo4j-ogm 1.1.4