尝试使用SDN 4并发现尽管某些查询在cypher浏览器中有效,但它们似乎无法在我的存储库中运行。例如,当我输入查询时:
MATCH (p:Publication) WHERE p.name =~'(?i)e.*' RETURN p;
在cypher浏览器中,它返回预期的结果。但是,我的存储库定义为:
public interface PublicationRepo extends GraphRepository<Publication> {
Publication findByName(String name);
@Query(value="MATCH (p:Publication) WHERE p.name=~'(?i){0}.*' RETURN p")
Iterable<Publication> findByNameLikeIgnoreCase(String name);
}
它返回零结果。
项目设置正常运行,因为我可以从其他自定义查询方法获取数据,但通配符匹配不起作用
此外,我觉得奇怪的是标准的Spring Data JPA查询方法也不起作用(例如&#39; findByNameContaining&#39;等)。有没有其他人遇到这个或我做错了什么。我见过的所有例子都非常基本。
答案 0 :(得分:1)
这不是春天数据neo4j问题。您可以在字符串中使用该参数,但不对其进行评估。
将其更改为this,使用参数连接正则表达式的字符串。
MATCH (p:Publication) WHERE p.name=~ ('(?i)' + {0} + '.*') RETURN p
public interface PublicationRepo extends GraphRepository<Publication> {
Publication findByName(String name);
@Query("MATCH (p:Publication) WHERE p.name=~ ('(?i)'+{0}+'.*') RETURN p")
Iterable<Publication> findByNameLikeIgnoreCase(String name);
}
答案 1 :(得分:0)
不确定是否有更好的方法来解决此问题,但实际上我将通配符令牌与搜索字符串连接起来,然后再将其传递给finder方法。代码如此:
public interface PublicationRepo extends GraphRepository<Publication> {
Publication findByName(String name);
@Query(value="MATCH (p:Publication)-[r:HAS_PUBLICATION]-(i:Issue) WHERE p.name=~{0} RETURN p, r, i")
Iterable<Publication> findByNameLikeIgnoreCase(String name);
}
这现在正在运行,但我并不真正喜欢需要按下查询参数的调用者。 C'est la vie。