2013-10-14 61 views
0

如何創建基於IN子句的查詢?文件似乎不清楚?以下代碼編譯並運行,但結果集不是預期的節點。Spring-Data中@Query params的作品集? Neo4j

public interface SomeRepository extends GraphRepository<SomeNode> { 

    @Query("START n=node({nodeid}) MATCH (n)-[r]-(p) WHERE p.id IN [{someids}] RETURN p") 
    public Set<SomeNode> findByIds(@Param("nodeid") Long rootNodeId, @Param("someids") Set<Long> someIds); 

} 

@NodeEntity 
public class SomeNode { 

    @GraphId 
    private Long internalId; 

    @Indexed(unique = true) 
    private Long id; 

    // getters setters omitted. 

} 

謝謝。

+0

沒有重訪SDN,你的'p.id'是你自己的id屬性,不是?與使用'ID(p)'的cypher檢索的Neo4j ID不同? – jjaderberg

+0

是.. id是本例中(in?)節點的一個屬性。不是節點的ID。 – Eric

+0

你的意思是「結果集不是預期的節點」?你能說明你是如何定義id屬性的嗎?它是與@GraphId註釋的id不同的字段嗎?無論如何,你可以嘗試刪除{someids}周圍的方括號。 – remigio

回答

0

正如您在評論中提到的那樣,您應該從IN子句中刪除「[]」。一個在春季工作的查詢示例 - 數據

@Query("MATCH (item:Item{id:{0}})-[:ALIGNS_TO]->(category:Category) 
     ,(suggestItem:Item)-[:ALIGNS_TO]->(category) 
     Where NOT(suggestItem.id IN {2}) 
     return suggestItem.id 
     ORDER BY suggestItem.avg_rating DESC limit {1} ") 

List<Integer> getCategoryItems(Integer itemId,int limit ,Set<Integer> excludeSet);