gpt4 book ai didi

Neo4j 存储库 - 使用动态 where 子句编写查询

转载 作者:行者123 更新时间:2023-12-01 10:04:17 25 4
gpt4 key购买 nike

我对Neo4j比较陌生,对用spring在Neo4j中写动态查询有疑问。根据我的阅读,查询在扩展 GraphRepository 类的接口(interface)中使用 @Query 参数进行注释,并且动态参数作为参数提供。

但我的要求是我必须动态生成 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);//

以类似的方式,年龄参数周围的许多子句会导致 where 子句的变化。我如何动态处理这个,因为目前我只知道这种执行查询的注释方式。我可以覆盖并编写自己的自定义查询吗?

最佳答案

您可以编写自己的自定义查询逻辑。首先你创建一个包含自定义查询方法的额外接口(interface),所以你得到两个存储库接口(interface)

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>);
}
}

关于Neo4j 存储库 - 使用动态 where 子句编写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com