에 대한 쿼리를 리포지토리에 수집 매개 변수를 전달하는 방법 : 해당 쿼리가 성공적으로 실행 및 제공내가 저장소 쿼리에 매개 변수로 컬렉션을 전달하려는 Neo4J을 위해 봄 데이터 사용 Neo4J
@Query("MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN {categories}) RETURN product")
Iterable<Product> findAllWithCategories(@Param("categories") List<String> categories);
명령 행에서 올바른 결과 :
MATCH (product:Product) WHERE ANY(c IN product.categories WHERE c IN ["Märklin","Fleischmann"]) RETURN product
그러나 findAllWithCategories 방법이 카테고리의 목록이 호출 될 때 어떤 결과가 반환되지 않습니다 자바 내에서
. 이상한 점은 올바른 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에 저장소 쿼리에 대한 매개 변수로 컬렉션을 전달할 수 있습니까?
편집 봄 데이터 저장소하지 않고 있지만, 명령 줄에 쿼리가 무엇을해야처럼 정말 이상하다 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);
내가 쿼리 문을 아무 잘못이 있다고 생각하지만, 오히려 목록 유형의 매개 변수를 사용하지 않습니다.
편집 반나절 후 내가 대신 HTTP 드라이버, 볼트 드라이버를 시도하고, 모든 것이 괜찮다고
(드라이버의 버전 2.0.6을 사용하여 버전 2.1.0은 이상한 예외를 throw)
[이 질문] (https://stackoverflow.com/questions/41014573/sdn4-cannot-findbyid-with-list-of-id) 도움이 되셨습니까? – troig
"자동"저장소 찾기가 작동하지 않는 이유는 무엇입니까? 내 경우에는 사용자 정의 쿼리입니다. – Gregor
github 문제 [here] (https://github.com/neo4j/neo4j-ogm/issues)에서'2.1.0' 볼트 드라이버로받은 오류를 보내 주시겠습니까? – digx1