Java cypher索引不';事务中不更新

Java cypher索引不';事务中不更新,java,neo4j,spring-data-neo4j,Java,Neo4j,Spring Data Neo4j,如果我在一个事务中,cypher索引不返回任何内容,但是如果我在运行cypher查询之前使用SpringRest或commit,它将返回节点。这是上下文:我有一个带有索引的对象,我正在通过Neo4jTemplate.save()插入它,如果我使用graphResposition.findByPropertyValue()来获取保存的对象,它将返回ok,但如果我使用Cypher带有索引,它将返回无任何内容。Cypher仅在通过nodeID获取对象时返回该对象 @NodeEntity public

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

@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);
在使用时不使用:

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);
Map params=newhashmap();
参数put(“id”,1L);
查询(“开始n=node:groupIndex(id={id})返回n”,参数);

问题在于,在查询中,您要求使用字符串格式的索引,但在第一个示例中,您将它们指定为数字

如果内存正常,就不能对数字存储的索引执行密码查询。你可以参考


这里最简单的解决方案是将您的
@index
更改为
@index(indexName=“groupIndex”,numeric=false)

将ID字段存储为非数字字段对不起,我忘了说它只发生在事务内部,如果我在运行它之前提交,查询将返回节点。关于引号,如果我删除它们,我会得到一个错误。我认为使用索引时需要引号,不管索引是否为数字。所以你是说现在执行
groupIndex
时查询可以工作?当我在事务中并查找插入其中的对象时,查询可以工作,但不返回任何内容。如果我插入对象,提交事务并运行查询,它将正确返回节点。此查询使用节点id而不是您的id:
Neo4jTemplate.query(“开始n=node(1)返回n”)请参见下面的,Nicolas是对的,请为注释使用numeric=false以进行正确的cypher查询:
Neo4jTemplate.query(“开始n=node:groupIndex(id=\“1”\)返回n”)顺便说一句,您应该使用一个参数:
Neo4jTemplate.query(“START n=node:groupIndex(id={id})RETURN n”)并传递一个参数为“id”->“1”的映射,结果相同。问题是,当我在一个事务中使用cypher上的index时,当我查找插入到同一事务中的节点时,它不会返回任何内容,但当使用GraphRespository.findByProperty()时,它会返回该节点。cypher将永远不会返回任何内容,至少在嵌入模式下不会返回任何内容,在REST模式下,索引默认为字符串。在嵌入式模式下,默认情况下,数值索引为数值(向后兼容)。您必须使用
@index(numeric=false)
将其索引为字符串。没错,Michael,我改为(numeric=false),它返回节点,但主要问题仍然存在。如果我试图在提交之前通过在同一事务上插入的索引获取节点,cypher不会返回它。