试用SDN 4,发现尽管某些查询在密码浏览器中有效,但它们似乎在我的存储库中无效。例如,当我输入查询时:
MATCH (p:Publication) WHERE p.name =~'(?i)e.*' RETURN p;
在密码浏览器中,它返回预期的结果。但是,将我的存储库定义为:
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查询方法也无法正常工作很奇怪(例如'findByNameContaining'等)。有其他人遇到这个问题还是我做错了什么。我所看到的所有示例都是非常基本的。
最佳答案
这不是spring数据neo4j问题。您可以在字符串中使用参数,但不对其进行评估。
将其更改为此,使用参数将正则表达式的字符串连接起来。
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);
}