【发布时间】:2015-05-13 18:51:48
【问题描述】:
是否可以在节点上设置属性并在单个密码查询中将其删除,而不会导致 Neo4j 中的实际磁盘写入。
例如,我尝试使用 n 作为差事复制此查询中的 n 节点,但差事上的 SET 会导致 n 上的 SET,同样 REMOVE 这样的属性会在返回值中丢失。
这是我在节点上创建临时属性的一种尝试。
String q = "MATCH (owner)-[:POSTED]->n WITH owner, n, n as errand,
CASE WHEN owner-[:RECOMMENDED]->n THEN 'BROADCASTED'
WHEN owner-[:POSTED]->n THEN 'POSTED'
WHEN owner-[:GOT_NOMINATED]->n THEN 'NOMINATED'
ELSE 'CONNECTED'
END AS relationship
SET errand.meta = relationship
REMOVE n.meta
RETURN errand LIMIT 1";
但是,当我检查我的域对象以查看该属性是否由 Neo4j 设置时,它返回 null。
public class Errand {
private String meta;
Boolean isMetaSet () {
return meta != null;
}
}
使用 SDN Neo4j 我得到了我的差事对象。
Errand single = template.query(q, null).to(Errand.class).singleOrNull();
System.out.println (single.isMetaSet());
返回假。
答案在 Neo4J create temp variable within Cypher 适用于节点?
我目前在 Neo4j 的嵌入式模式下使用 Neo4j,我的查询是使用 Neo4jTemplate 类运行的。
查看我在Set a transient property on a node neo4j就这个问题提出的类似问题的回复
【问题讨论】:
-
我想将一个可反序列化的节点返回到我的模型对象中
-
尝试返回属性时的最佳答案。
-
这会导致空指针异常,因为它在返回之前已被删除。我的密码查询有问题吗?
-
改写我的问题
-
请更新问题以显示根据该查询填充 Errand 对象的代码。您是否尝试过不绑定
n两次,一次绑定到自身,一次绑定到 WITH 块中的errand?
标签: neo4j cypher spring-data-neo4j