Neo4j 自定义 Cypher @Query 包含 RegEx returns 无结果
Neo4j custom Cypher @Query containing RegEx returns no result
我的 Neo4jRepository
中有以下自定义查询(我正在使用 Spring Boot with Spring Data Neo4j):
@Query("MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n")
Component findByTenantAndName(String tenant, String name);
当我 运行 在应用程序中进行此查询时 returns null
具有以下日志语句:
2018-01-12 10:58:27.744 INFO 74294 --- [nio-8080-exec-1] o.n.o.drivers.bolt.request.BoltRequest : Request: MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n with params {0=foo, 1=baz}
2018-01-12 10:58:27.763 WARN 74294 --- [nio-8080-exec-1] d.c.a.service.MyService : Could not find parent component named 'baz' for tenant 'foo'
但是,如果我在 http://localhost:7474 和 运行 访问 Cypher 后端,查询:
MATCH (n:Component) WHERE n.path =~ '/path/foo/.*/baz' RETURN n
我正好得到一个 Component
结果,路径为 /path/foo/bar/baz
。我的自定义查询有什么问题?
@Query("MATCH (n:Component) WHERE n.path =~ {0} RETURN n")
Component findByTenantAndName(String query);
并且来自您调用它的服务。像这样传递整个正则表达式
String query = "/path/<tenant>/.*/<name>"; // replace tenant and name with actual variables.
findByTenantAndName(query)
我的 Neo4jRepository
中有以下自定义查询(我正在使用 Spring Boot with Spring Data Neo4j):
@Query("MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n")
Component findByTenantAndName(String tenant, String name);
当我 运行 在应用程序中进行此查询时 returns null
具有以下日志语句:
2018-01-12 10:58:27.744 INFO 74294 --- [nio-8080-exec-1] o.n.o.drivers.bolt.request.BoltRequest : Request: MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n with params {0=foo, 1=baz}
2018-01-12 10:58:27.763 WARN 74294 --- [nio-8080-exec-1] d.c.a.service.MyService : Could not find parent component named 'baz' for tenant 'foo'
但是,如果我在 http://localhost:7474 和 运行 访问 Cypher 后端,查询:
MATCH (n:Component) WHERE n.path =~ '/path/foo/.*/baz' RETURN n
我正好得到一个 Component
结果,路径为 /path/foo/bar/baz
。我的自定义查询有什么问题?
@Query("MATCH (n:Component) WHERE n.path =~ {0} RETURN n")
Component findByTenantAndName(String query);
并且来自您调用它的服务。像这样传递整个正则表达式
String query = "/path/<tenant>/.*/<name>"; // replace tenant and name with actual variables.
findByTenantAndName(query)