对于Spring数据图上的Cypher查询来说,这可能是相当微不足道的…
我正在寻找什么是Cypher查询来获取具有一对属性的给定值的所有节点。那么,以下内容的@Query注释中的???
是什么:
@Query(???)
List<MyObject> findByProperty1AndProperty2(String property1, String property2)
编辑:因此,我设法通过添加Cypher依赖关系来使用派生查询(如下面的Michael建议)。但我似乎得到以下错误:
string matching regex (?i)QreturnE' 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
)
请考虑到全局查询不是Neo4j的甜蜜点,但是当您运行Spring Data Neo4j时,这一点得到了缓解。:)
实际上,这个查询不需要@Query
注释。
它构造了一个派生查询,无论如何查看您的属性,如果一个被索引,它将使用该查询作为您查询的起点,否则它将从"__type__
"索引中提取所有条目。
实际上它将创建如下查询:
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>