Warm tip: This article is reproduced from serverfault.com, please click

java-Spring Data / Neo4j @Query注释属性替换

(java - Spring Data / Neo4j @Query annotation property substitution)

发布于 2020-12-01 06:07:48

我正在使用基于Spring Data / Neo4j的推荐服务,但在@Query注释方面遇到了问题我正在尝试将属性(network_userid传递到Cypher查询中:

package io.woolford.neo4j.repository;

import io.woolford.neo4j.entity.PageUrl;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;


public interface RecommendationsRepository extends Neo4jRepository<PageUrl, Long> {
    @Query("MATCH (n {id: '$network_userid' }) RETURN n")     // simplified query for brevity
    List<PageUrl> getRecommendations(@Param("network_userid") String network_userid);
}

我认为这很简单,只要在属性名称前面加一个美元符号,然后用属性值替换属性名称即可(如上所述)。我期望这样:

MATCH (n {id: '1447e32a-3381-4e61-a8ae-9a05b8df4ddb'}) RETURN n

当我打开调试时,Cypher查询似乎没有用值替换该属性:

[nio-8080-exec-1] o.n.o.drivers.bolt.request.BoltRequest   : Request: MATCH (n {id: '$network_userid' }) RETURN n with params {0=1447e32a-3381-4e61-a8ae-9a05b8df4ddb, network_userid=1447e32a-3381-4e61-a8ae-9a05b8df4ddb}

作为一项好措施,我进行了数据包捕获,以查看通过网络发送的内容:

...d'...............+MATCH (n {id: '$network_userid' }) RETURN n..0.$1447e32a-3381-4e61-a8ae-9a05b8df4ddb.network_userid.$1447e32a-3381-4e61-a8ae-9a05b8df4ddb......?..n.....

...这再次表明属性替换没有发生。

你能看到我做错了吗?

源代码:https : //github.com/alexwoolford/snowplow-neo4j-recommender

Questioner
Alex Woolford
Viewed
0
meistermeier 2020-12-05 03:22:34

查询的唯一问题是你要'$network_userid'像字符串一样转义,但是你应该这样做: @Query("MATCH (n {id: $network_userid }) RETURN n")不带字符串文字指示。