gpt4 book ai didi

spring - 是否可以使用 GraphRepository 模式动态构建 Neo4j 密码查询

转载 作者:行者123 更新时间:2023-12-04 14:56:55 24 4
gpt4 key购买 nike

语境 :
我正在开发一个由 neo4j 数据库支持的 java Spring Boot 系统。我使用“ClassRepo extends GraphRepository”结构访问数据库。编写查询是在我的精确查询中硬编码的一个简单案例,并用提供的参数(在本例中为 courseName)替换其中的指定部分。

@Query("MATCH (node:Course) WHERE node.name = {courseName}  RETURN node LIMIT 1")
Course findByName(@Param("courseName") String name);

这对我来说一切正常,让我可以毫无问题地返回一个或多个结果。然而,随着我的项目的发展,我现在提供了大量的搜索选项列表(分面搜索,想想亚马逊产品过滤器)。为选择的或未选择的过滤选项的每个排列编写静态密码查询似乎很愚蠢。

我的解决方案(尝试)是将查询的一部分作为参数传入,实质上是创建一个字符串查询构建器:
@Query("MATCH (course:Course) -[r]-> (description:CourseYearDescription) " +
"WITH course, count(description) as relationCount, collect(description) as descriptions " +
"WHERE relationCount > {numberOfYears} {returnCourse}")
Iterable<Course> findCourseWithNumberOfYears(
@Param("numberOfYears") int numberOfYears,
@Param("returnCourse") String returnCourse
);

其中“returnCourse”是一个值为“RETURN course”的字符串。我知道在查询字符串中静态输入的“返回类(class)”有效。我刚刚删除了它并将字符串值作为参数传入,以查看它是否可以生成相同的查询并在运行时运行它。

这并没有真正成功,让我返回一个错误页面并打印出以下堆栈: http://pastebin.com/J9VBfpxw

题:
有没有办法将字符串附加/插入到 GraphRepository 使用的密码查询字符串中,以便可以动态更改查询,即在运行时将 where 子句添加到匹配查询的末尾。

最佳答案

不,没有。 SDN/Neo4j OGM 不会在运行时修改自定义查询,只会将它们交给 Cypher 引擎执行。因此,您唯一可以参数化的是 Cypher 允许您参数化的内容( http://neo4j.com/docs/stable/cypher-parameters.html )。

同意为每个变体定义多个 @Query 语句没有意义,但您可以做的是将查询构建为字符串并使用 Neo4jOperations.query* 方法,该方法将接受动态生成的 Cypher 查询和参数映射(同样,在 Cypher 语句中有效的参数)。

希望有帮助。

关于spring - 是否可以使用 GraphRepository 模式动态构建 Neo4j 密码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979333/

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