neo4j
  • cypher
  • spring-data-neo4j
  • 2013-11-02 89 views 3 likes 
    3

    我對Neo4j相對比較陌生,並且對使用Spring在Neo4j中編寫動態查詢有疑問。 從我讀過的內容來看,查詢在擴展GraphRepository類的接口中用@Query參數進行了註釋,動態參數作爲參數提供。Neo4j存儲庫 - 使用動態where子句寫入查詢

    但我的要求是,我必須動態生成where子句的數量。

    For example, 
    @Query("match n where n.__type__='com.connectme.domain.Person' and n.age > {0} return n.id) 
    public List<Object> getPeopleWithAge(Integer age);// 
    

    我的查詢也可以改變,其中年齡也可以小於一定值,在這種情況下,查詢可以成爲:

    @Query("match n where n.__type__='com.connectme.domain.Person' and n.age > {0} and n.age <{1} return n.id) 
    public List<Object> getPeopleWithAge(Integer age1, Integer age2);// 
    

    以類似的方式,圍繞年齡參數許多條款可能會導致在哪裏條款的變化。 我如何動態地處理這個,因爲目前我只知道這種執行查詢的註釋方式。 我可以覆蓋並編寫自己的自定義查詢嗎?

    +0

    您還可以使用的Neo4j-Template.query自定義查詢或從CypherDslRepository繼承並使用CypherDSL –

    +0

    請您詳細說明一下嗎?我不熟悉CypherDslREpository是什麼? –

    回答

    2

    您可以編寫自己的自定義查詢邏輯。首先,創建包含自定義查詢方法一個額外的接口,所以你得到兩個信息庫接口

    public interface YourRepository extends GraphRepository<SomeClass> implements YourRepositoryExtension{ 
        //inferred queries, annotated queries 
    } 
    
    
    public interface YourRepositoryExtension { 
        EndResult<SomeClass> customQuery(); 
        Iterable<SomeClass> customTraversal(); 
    } 
    

    然後,你做的實現:

    @Repository 
    public class YourRepositoryImpl implements YourRepositoryExtension { 
    
        @Autowired 
        private YourRepository yourRepository; 
    
        @Override 
        public EndResult<SomeClass> customQuery(){ 
         //your query logic, using yourRepository to make cypher calls. 
         return yourRepository.query("START n.. etc.. RETURN n", <optional params>); 
        } 
    
        @Override 
        public Iterable<SomeClass> customTraversal(){ 
         SomeClass startNode = yourRepository.findOne(123); 
         return yourRepository.findAllByTraversal(startNode, <some custom traversal>); 
        } 
    } 
    
    +0

    感謝您的回覆......但我沒有完全理解這一點呢......我如何編寫查詢,我是否必須在YourRepositoryImpl類中實現GraphRepository? –

    +0

    我已經更新了示例以更加詳細。現在更清楚了嗎? – Wouter

    +0

    對不起,對於遲到的答覆..但非常感謝解釋。清除了一段時間以來困擾我的問題。 –

    相關問題