1

作为 Spring Data Graph 上的 Cypher 查询的新手,这可能很简单......

我正在寻找什么是 Cypher 查询来获取具有几个属性的给定值的所有节点。那么,???@Query 注释中将包含以下内容:

@Query(???)
List<MyObject> findByProperty1AndProperty2(String property1, String property2)

编辑: 所以,我设法通过添加 Cypher 依赖项来使用派生查询(如下面的 Michael 所建议)。但我似乎收到以下错误:

string matching regex (?i)\Qreturn\E' expected but ,' found

我认为这是因为它似乎正在创建如下查询:

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0}, n.property2 = {1} return n

而不是

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0} and n.property2 = {1} return n

(注意查询中的,而不是and

提前致谢。

4

1 回答 1

4

请考虑到全局查询不是 Neo4j 的最佳选择,但是当您运行 Spring Data Neo4j 时,这会有所缓解。:)

实际上,您不需要@Query此查询的注释。

无论如何,它都会构造一个派生查询,查看您的属性,如果一个被索引,它将使用该查询作为查询的起点,否则它将从“ __type__”-index 中提取所有条目。

实际上它会创建一个查询,如:

start n=node:__types__(className="com.example.MyObject")
where n.property1 = {0} and n.property2 = {1} 
return n

因此,如果您使用的是 SDN 的当前快照版本(本周将作为 RC1 发布。您可以这样做:

List<MyObject> findByProperty1AndProperty2(String property1, String property2)

当然 cypher 和 gremlin 是 SDN 中的可选依赖项(b/c 有些人不想在默认情况下引入 scala / groovy)。您只需将 cypher 的 maven 依赖项添加到您的项目中

<dependency>
   <groupId>org.neo4j</groupId>
   <artifactId>neo4j-cypher</artifactId>
   <version>${neo4j.version}</version>
</dependency>
于 2011-11-09T08:45:36.583 回答