Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将集合参数传递给Neo4J的存储库查询_Neo4j_Spring Data Neo4j_Neo4j Ogm - Fatal编程技术网

如何将集合参数传递给Neo4J的存储库查询

如何将集合参数传递给Neo4J的存储库查询,neo4j,spring-data-neo4j,neo4j-ogm,Neo4j,Spring Data Neo4j,Neo4j Ogm,使用用于Neo4J的Spring数据,我希望将集合作为参数传递给存储库查询: @Query("MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product") Iterable<Product> findAllWithCategories(@Param("categories") List<String> categories); 但是,

使用用于Neo4J的Spring数据,我希望将集合作为参数传递给存储库查询:

@Query("MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product")
Iterable<Product> findAllWithCategories(@Param("categories") List<String> categories);
但是,当使用类别列表调用findAllWithCategories方法时,Java内部不会返回任何结果。奇怪的是,似乎正确的http请求被发送到了DB:

request: {"statements":[{"statement":"MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product","parameters":{"categories":["Märklin","Fleischmann"]},"resultDataContents":["graph"],"includeStats":false}]}
知道这里出了什么问题吗?一般来说,如何将集合作为参数传递给Neo4J的存储库查询

编辑 在没有Spring数据存储库的情况下运行相同的查询,但使用较低级别的Neo4JTemplate会得到相同的结果,这真的很奇怪,因为命令行上的查询做了它应该做的事情

private final String FIND_PRODUCTS_WITH_CATEGORIES = "MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product";

String[] categories = ...

Map<String, Object> map = new HashedMap<>();
map.put("categories", categories);
products = neo4j.queryForObjects(Product.class, FIND_PRODUCTS_WITH_CATEGORIES, map);
private final String FIND_PRODUCTS_WITH_CATEGORIES=“MATCH(product:product)WHERE ANY(product.CATEGORIES中的c,其中{CATEGORIES}中的c)返回产品”;
字符串[]类别=。。。
Map Map=newhashedmap();
地图放置(“类别”,类别);
products=neo4j.queryForObjects(Product.class,查找带有类别的产品,映射);
我认为查询语句没有任何问题,而是列表类型的参数有问题

编辑
半天之后,我尝试了bolt驱动程序,而不是http驱动程序,一切正常(使用2.0.6版驱动程序,2.1.0版抛出一个奇怪的异常)

查询都正常。将数组或列表作为参数移交给查询是可行的。问题在于驱动程序:使用http驱动程序没有成功,bolt驱动程序在最新版本2.1.0中似乎有缺陷。但是我用bolt 2.0.6运行了它。

有帮助吗?问题是,“自动”存储库查找器为什么不工作。在我的例子中,这是一个用户定义的查询。您能给我们发送您在github问题中使用
2.1.0
螺栓驱动程序时遇到的错误吗?
private final String FIND_PRODUCTS_WITH_CATEGORIES = "MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product";

String[] categories = ...

Map<String, Object> map = new HashedMap<>();
map.put("categories", categories);
products = neo4j.queryForObjects(Product.class, FIND_PRODUCTS_WITH_CATEGORIES, map);