【发布时间】:2014-03-18 10:56:38
【问题描述】:
我的部分项目使用 spring-data-neo4j 时遇到问题。我有节点实体类:
@NodeEntity
@TypeAlias("Ad")
public class Ad{
@GraphId
private Long nodeId;
@Indexed(indexName = "adId", unique = true)
private Long id;
@Fetch
@RelatedTo(type="CONTAINS", direction = Direction.OUTGOING)
private Collection<Keyword> keywords;
...
以及使用此类方法的存储库:
@Query(value = "START ad1=node({adv}) MATCH ad1-[r1:CONTAINS]->Keyword<-[r2:CONTAINS]-similar RETURN similar SKIP {param_offset} LIMIT {param_limit}")
Iterable<Ad> findSimilarAds(@Param("adv") Ad advertising, @Param("param_limit") int limit, @Param("param_offset") int offset);
@Query(value = "START ad1=node:adId(id={p_id}) MATCH ad1-[r1:CONTAINS]->Keyword<-[r2:CONTAINS]-similar RETURN similar SKIP {param_offset} LIMIT {param_limit}")
Iterable<Ad> findSimilarAdsById(@Param("p_id") Long id, @Param("param_limit") int limit, @Param("param_offset") int offset);
然后进行测试,就是这样:
创建关键字 1,创建关键字 2 - 好的
创建 ID 为 123456 且包含关键字 1 和关键字 2 的广告节点 - 好的
创建 ID 为 654321 且包含关键字 1 的广告节点 - ok
-
获取 ID 为 654321 的广告 - 工作正常,生成的查询是:
开始
ad=node:adId(id={0}) 返回ad参数{0=654321} -
使用 findSimilarAds() 获取类似广告,参数是上一步中的广告 - 效果很好,它返回 id 为 123456 的广告,生成查询:
START ad1=node({adv}) MATCH ad1-[r1:CONTAINS]->Keyword
-
之后,使用 findSimilarAdsById() 方法获取类似广告 - id 参数为 654321L。结果查询如下所示:
START ad1=node:adId(id={p_id}) MATCH ad1-[r1:CONTAINS]->Keyword
但它返回的是空的 org.springframework.data.neo4j.conversion.QueryResultBuilder 实例(我正在尝试使用迭代器获取元素)而不是使用 Ad 123456 的 Iterable 集合。 我已经尝试了几乎所有我能想到的东西,但都没有成功,我是不是错过了一些重要的事情?
版本:
- spring-data-neo4j 2.3.3.RELEASE
- neo4j-cypher-dsl 1.8
- 春天的东西 3.1.4.RELEASE
- spring-data-neo4j-aspects 2.3.2.RELEASE
【问题讨论】:
标签: neo4j cypher spring-data-neo4j