当前位置: 首页 > 知识库问答 >
问题:

Spring数据Neo4j存储库返回空集合

孟鸿朗
2023-03-14

我在使用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);

然后测试,就像这样:

>

创建id为123456的广告节点,包含关键字1和关键字2-ok

创建id为654321且包含关键字1的广告节点-确定

获取广告ID 654321-工作正常,生成的查询是:

开始ad=节点:adIdid={0})返回adparams{0=654321}

使用findSimilarAds()获取类似的广告,参数是上一步的广告-效果良好,返回id为123456的广告,生成的查询:

START ad1=节点({adv})匹配ad1-[r1:包含]-

然后,使用findSimilarAdsById()方法获取类似的ads—id参数为654321L。结果查询如下所示:

开始ad1=节点: adId(id={p_id})匹配ad1-[r1: CONTAINS]-

但它正在返回空组织。springframework。数据neo4j。转变QueryResultBuilder实例(我尝试使用迭代器获取元素),而不是使用Ad 123456获取Iterable集合。我已经尝试了我能想到的一切,但没有成功,我是否错过了一些重要的东西?

版本:

  • spring-data-neo4j 2.3。3.发布

共有1个答案

况浩邈
2023-03-14

我认为你运行在数字索引问题,这是不可用的密码。由于lucene解析器的问题。

如果你使用

@Indexed(indexName = "adId", unique = true, numeric=false)
private Long id;

它应该会起作用。

或者您必须传入ValueContext。数值(id)而不是长id作为方法的参数。

对于派生查找程序,我们会自动处理,但对于用户定义的查询,我们无法知道您实际传入了什么。

 类似资料:
  • 我已经实现了一个小用例来评估Spring Data Neo4j。我有一个接口,它扩展了GraphRepository。 界面是这样的: 这给了我错误< code >“类型PublicRepository的层次结构不一致”。 这种类型的错误是因为当前类扩展/实现的类/接口之一不存在,而当前类又在扩展/实现另一个类/接口。 查看核心库的包我发现库中没有扩展为CRUDRepository的接口。我在Ne

  • 我是Spring data neo4j的新手,我对GraphRepository有一些错误/问题。 我第一次有了这个: 但是阅读一些文档,存储库已经提供了这样的方法。我不需要写它们。 这是我的产品域名。 这是我的实验班 未检测到查找字节 Id 这正常吗? 这是我的pom.xml

  • 我在我的JavaEE7应用程序中使用spring-data-neo4j(独立)作为漂亮的neo4j-OGM。 目前,我正在尝试通过@Autowired将spring-data-neo4j存储库集成到我的项目中。 我已经开始编写一些JUnit测试,这些测试是测试本身使用这个存储库的bean。目前一切正常。 现在,我想将这个新的存储库类集成到我的JavaEE7应用程序中,我正在将其部署到wildfly

  • 我试图获取一个列表从数据库和findAll()返回空列表。我有多个jpa存储库,但只有一个不工作。这是代码: 这就是实体: 当我调用product类别epository.findAll()时,它返回空列表,因此我在数据库中有许多条目。谢谢你的帮助!

  • 我想使用SpringBoot和SpringDataMongoDB开发一个小测试应用程序。因此,在本例中,我使用默认配置(如localhost:27017/test-database),并尝试遵循spring指南(https://spring.io/guides/gs/accessing-data-mongodb/). 我按如下方式启动我的应用程序: DummyClass如下所示: 当project

  • 我读过一些关于在存储库请求中使用空值的帖子,但它们都已经存在多年了。所以我问这个问题是为了了解问题的现状。 我想说的是: 我想要一个带有可选空值的JPA请求。我的存储库中的函数如下所示: 这样我就可以像这样省略过滤器中的参数:(@Query的一部分) 这只在我的参数不为NULL时有效。 请注意,我在这里使用的是原生查询。(JPA实现是Hibernate,DB是postgres) 提前感谢您的每一次