cypher上的索引不会在事务中更新

时间:2013-06-19 15:23:22

标签: java neo4j spring-data-neo4j

如果我在事务中 ,则cypher索引不返回任何内容,但如果我在运行cypher查询之前使用SpringRest或commit,则返回该节点。这是上下文:我有一个带索引的对象,我通过Neo4jTemplate.save()插入它,如果我使用GraphRepository.findByPropertyValue()来保存对象,则返回 ok ,但是如果我使用Cypher索引,则返回。如果我通过nodeID获取它,Cypher仅返回该对象。

@NodeEntity
public class Group {
    @GraphId
    private Long nodeId;
    @Indexed(indexName = "groupIndex")
    private Long id;
}

使用时确定:

GraphRepository.findByProperty("id", 1L);
Neo4jTemplate.query("START n=node(1) RETURN n");

使用时没有:

Map<String, Object> params = new HashMap<>();
params.put("id", 1L);
Neo4jTemplate.query("START n=node:groupIndex(id={id}) RETURN n", params);

1 个答案:

答案 0 :(得分:2)

问题在于,在查询中,您要求以String格式提供索引,但在第一个示例中,您将它们指定为数字。

如果内存正确地为我服务,则无法对数字存储的索引执行Cypher查询。您可以参考this link

此处的简单解决方案是将您的@Indexed归为@Indexed(indexName = "groupIndex", numeric = false)

,将该ID字段存储为非数字字段