@Query 是否可以使用密码动态标签?

问题描述 投票:0回答:2

我正在使用SDN 3.1.0.RELEASE。 我尝试像

这样的动态标签查询
@Query("MATCH (n:{0}) RETURN n")
public List<SimpleArticle> findAllByDomain(String domain);

并给出 String 参数,如 SimpleArticle.class.getSimpleName() 当我启动测试代码时,我遇到了“SyntaxException At {0}”

所以我将查询更改为

@Query("MATCH (n:`{0}`) RETURN n")

此代码可以工作,但找不到域节点。
结果日志是“执行远程密码查询:MATCH (n:`{0}`) RETURN n params {0=SimpleArticle}”

所以我在查询浏览器中运行这个密码查询

MATCH (n:`SimpleArticle`) RETURN n ; 

它可以工作并找到节点。

我可以在@Query中使用动态标签吗?

neo4j cypher spring-data-neo4j
2个回答
4
投票

标签无法参数化。这样做的理由是不同的标签可能会导致不同的查询计划。参数化查询始终使用相同的查询计划 - 因此这是不可能的。

使用“半”动态标签的唯一方法是使用字符串连接或 Cypher DSL。


0
投票

虽然对于发帖者来说肯定为时已晚,但该线程是搜索时首先出现的线程之一。 在较新的版本中,您可以参数化搜索特定标签:

@Query("MATCH (n:`:#{literal(#label)}`) RETURN n") 
List<BaseClass> findByLabel(String label);

来源:https://docs.spring.io/spring-data/neo4j/reference/appendix/custom-queries.html#literal-extension

© www.soinside.com 2019 - 2024. All rights reserved.