试用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);
}

10-07 13:03
查看更多