我正在使用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中使用动态标签吗?
标签无法参数化。这样做的理由是不同的标签可能会导致不同的查询计划。参数化查询始终使用相同的查询计划 - 因此这是不可能的。
使用“半”动态标签的唯一方法是使用字符串连接或 Cypher DSL。
虽然对于发帖者来说肯定为时已晚,但该线程是搜索时首先出现的线程之一。 在较新的版本中,您可以参数化搜索特定标签:
@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