使用 spring data neo4j 3 使 Cypher 查询成为动态的一部分

Posted

技术标签:

【中文标题】使用 spring data neo4j 3 使 Cypher 查询成为动态的一部分【英文标题】:Make part of a Cypher query dynamic with spring data neo4j 3 【发布时间】:2014-06-01 12:27:08 【问题描述】:

我有一个扩展 GraphRepository 的 UserRepository 类:

  public interface UserRepository extends GraphRepository<User> 

    @Query("MATCH (User:_User) WHERE User.network = 0 RETURN User")
    Iterable<User> executeFilterTest(String filterValue);

  

问题是我并不总是确切地知道查询的“WHERE”部分会有什么。所以我希望能够将 WHERE 部分作为这样的参数发送:

    @Query("MATCH (User:_User) 0 RETURN User")
    Iterable<User> executeFilterTest(String whereValue);

有可能做这样的事情吗?或者我可以以某种方式将整个 Cypher 查询保存为字符串,然后将整个字符串作为参数发送?

【问题讨论】:

【参考方案1】:

尝试使用自定义存储库示例(请注意不要认为 impl 方法必须与您的 userRepository 而不是 userRepositoryCustom 匹配,例如:UserRepositoryImpl):

public interface UserRepository extends GraphRepository<User>, UserRepository 


public class UserRepositoryImpl implements UserRepositoryCustom 
    @Autowired Neo4jTemplate template;
    @Override
    public Result<Map<String, Object>> findByCypher(String cypher) 
    return template.query(cypher, null);
    


public interface UserRepositoryCustom 
    Result<Map<String, Object>> findByCypher(String cypher);    

【讨论】:

UserRepository 应该扩展 UserRepositoryCustom 而不是 UserRepository

以上是关于使用 spring data neo4j 3 使 Cypher 查询成为动态的一部分的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 2.0 neo4j 使用

Neo4j Spring Data NodeEntity 使用字符串作为@id

Neo4j 和 Spring-data Map 查询结果到 Jackson JsonNode

IgnoreCase Finder 不适用于 Spring Data Rest 和 Neo4J

如何在 Grails 2.4.2 项目中集成 Spring Data Neo4j 和 Mongodb

Spring Data REST Neo4j 创建关系