如何将集合参数传递给Neo4J的存储库查询
使用用于Neo4J的Spring数据,我希望将集合作为参数传递给存储库查询:如何将集合参数传递给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); 但是,
@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);