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

Spring数据neo4j和使用IN关键字进行查询

邹英光
2023-03-14
@RelationshipEntity
public class Mother {

    @Indexed(level=Level.INSTANCE) Visibility visibility;
    public Visibility getVisibility() {
        return visibility;
    }
    public void setVisibility(Visibility visibility) {
        this.visibility = visibility;
    }
}

public class Child extends Mother {
    @StartNode StartNode start;
    @EndNode EndNode end;
}
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility='Private' return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=\"Private\" return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=Private return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in ['Private', 'Network'] return r")
Iterable<Child> findChildren(StartNode start);

我的可见性没有被索引吗?还是我不该这么做?我没有尝试用字符串更改可见性属性,我认为这应该有效,因为我有其他可以成功查询的字符串属性。使用'in'操作符是一个额外的好处!

编辑1:我使用的是spring-data-neo4j2.0.1.release。我试图在单元测试中使用org.neo4j.test.impermanentgraphdatabase,但是我刚刚意识到@query(“start s=node({0})match s-[r:type]->e where r.visibility='private'return r”)在使用默认配置运行服务器时可以工作,但是在单元测试中仍然不能工作。而且,即使在运行服务器时,'IN'子句仍然会引发错误。这与我正在使用的版本有关吗?我记得尝试使用一个较新的版本,但依赖项失败了,也许我应该再试一次。

编辑2:所以我将spring-data-neo4j的版本更新为2.1.0.build-snapshot,并将neo4j的版本升级为1.7。现在,'in'关键字没有错误,但我不知道应该使用什么语法传递要搜索的值。所以有

@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in [{1}] return r")
Iterable<Child> findChildren(StartNode start, String visibility);

如果传递像public这样的简单字符串,则可以工作,但如果传递public、private,则不会返回任何内容,即使public确实返回匹配项。我还尝试为string[]visibility更改参数string visibility,但这根本不起作用。

共有1个答案

左丘弘致
2023-03-14

@纪尧姆,

完成如下操作:https://jira.springsource.org/browse/datagraph-281

它在构建快照中提供,并将在SDN 2.1.RC4/GA中提供

 类似资料:
  • 我目前正在从事一个利用Spring数据Neo4j的项目。每当创建节点时,我都希望创建一个包含创建日期和用户的引用审核节点。 我提出的一个解决方案是编写一个AOP方面,它与我的服务层的create方法挂钩。这对于没有级联的实体很好,但是级联的实体呢?它们没有在我的服务层中显式传递,因此我的AOP类不会拦截它们。JPA中是否有类似实体侦听器的概念,或者如何连接到该机制中?

  • 我试图编写一个返回大量数据(200个节点)的查询。节点非常简单: 我最初使用Spring Data Neo4j模板接口,但在返回大约100个节点后发现它非常慢。 所以,我的问题是:是否有一种方法可以提供标签作为Cypher查询的一部分,以防止需要再次查询每个节点?或者,除此之外,是否有一种方法可以为SDN提供一个包含标签和属性的并将其转换为POJO? 注意:我意识到SDN团队正在未来的版本中完全使

  • 我正在使用一个Spring数据JPA(4.3.5)存储库和一个查询方法,该方法在关键字子句中使用<代码>列表 给定如下实体: 使用该SQL声明: Estat是一个枚举类,类似于: 和JPA存储库,如: 当我运行(联调类): 生成的SQL是(在内存H2 DB中): 不会引发任何SQL异常,并且不会返回任何结果。但这应该返回1个结果,因为此(等效)SQL返回: 我能看到的独特区别是我如何在"(该列是V

  • 问题内容: 我不认为IN子句可以接受具有多个值的绑定参数。甲骨文不能和几分钟 和查询是 并且存储过程是 结果为空 并直接在关键字中传递字符串 那结果还可以 问题答案: 在SQL Server 2016+中:使用内置函数。请注意,不再需要多余的单引号: 如果您运行的SQL Server早于SQL 2016,则@GuidoG的答案是一种更好的方法

  • 我试图将属性存储为Neo4j图中的节点,然后可以使用Spring Data Rest API访问这些节点。(然后我想在我的图中找到具有相同属性的对象。)我的对象的JSON表示应该像 最简单的方法是 显然,这不起作用,就像地图一样。条目不是@NodeEntity。 有没有简单的方法来实现这一点?

  • 我开始使用Neo4j和Spring Data Neo4j的项目。我希望我的程序使用已经包含我的数据的本地数据库(而不是每次启动时加载数据),因为我有很多数据需要加载到数据库中。为了实现这个目标,我尝试设置一个用我的数据填充数据库的测试用例。但是,在我的测试完成后,数据库中的数据似乎不会持久:我使用neo4j控制台/shell查看数据库,发现它是空的。 我已经构建了一个小的例子项目,也不工作。任何对