Spring 数据/Neo4j @Query 注解属性 替换
Spring Data / Neo4j @Query annotation property substitution
我正在研究 Spring 基于数据/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.47e32a-3381-4e61-a8ae-9a05b8df4ddb.network_userid.47e32a-3381-4e61-a8ae-9a05b8df4ddb......?..n.....
... 这再次表明 属性 替换没有发生。
你能看出我做错了什么吗?
源代码:https://github.com/alexwoolford/snowplow-neo4j-recommender
您的查询的唯一问题是您正在像字符串一样转义 '$network_userid'
但您应该这样做:
@Query("MATCH (n {id: $network_userid }) RETURN n")
没有字符串文字指示。
我正在研究 Spring 基于数据/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.47e32a-3381-4e61-a8ae-9a05b8df4ddb.network_userid.47e32a-3381-4e61-a8ae-9a05b8df4ddb......?..n.....
... 这再次表明 属性 替换没有发生。
你能看出我做错了什么吗?
源代码:https://github.com/alexwoolford/snowplow-neo4j-recommender
您的查询的唯一问题是您正在像字符串一样转义 '$network_userid'
但您应该这样做:
@Query("MATCH (n {id: $network_userid }) RETURN n")
没有字符串文字指示。