Spring Neo4j 4 (SDN) 通配符查询方法不起作用
Spring Neo4j 4 (SDN) Wildcard Query methods not working
试用 SDN 4 并发现虽然某些查询在密码浏览器中有效,但它们似乎在我的存储库中不起作用。例如,当我输入查询时:
MATCH (p:Publication) WHERE p.name =~'(?i)e.*' RETURN p;
在密码浏览器中,它returns 预期的结果。但是,我的存储库定义为:
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);
}
它 returns 零个结果。
项目设置运行正常,因为我可以从其他自定义查询方法获取数据,但通配符匹配不起作用
此外,我发现标准 Spring Data JPA 查询方法也不起作用(例如 'findByNameContaining' 等)很奇怪。有其他人 运行 参与其中还是我做错了什么。我看到的所有示例都非常基础。
不确定是否有更好的方法来解决这个问题,但基本上我在将通配符标记与搜索字符串传递给 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.
这不是 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);
}
试用 SDN 4 并发现虽然某些查询在密码浏览器中有效,但它们似乎在我的存储库中不起作用。例如,当我输入查询时:
MATCH (p:Publication) WHERE p.name =~'(?i)e.*' RETURN p;
在密码浏览器中,它returns 预期的结果。但是,我的存储库定义为:
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);
}
它 returns 零个结果。
项目设置运行正常,因为我可以从其他自定义查询方法获取数据,但通配符匹配不起作用
此外,我发现标准 Spring Data JPA 查询方法也不起作用(例如 'findByNameContaining' 等)很奇怪。有其他人 运行 参与其中还是我做错了什么。我看到的所有示例都非常基础。
不确定是否有更好的方法来解决这个问题,但基本上我在将通配符标记与搜索字符串传递给 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.
这不是 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);
}