我有许多与关系相关的不同节点。在这些关系上,我使用了Enum类型的一些属性,并且我试图使用Cyper语言查询关系,并且只返回那些具有Enum属性的数组。此外,我试图查询的关系是另一个具有我想要查询的属性的子类。这是一个例子:
@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);
我真正想要使用的是'IN'运算符,但是如果它不知道IN是什么就会引发错误。
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in ['Private', 'Network'] return r")
Iterable<Child> findChildren(StartNode start);
我的可见度是否未被编入索引?或者我不应该这样做?我没有尝试用字符串更改Visibility属性,我认为应该可以工作,因为我有其他可以成功查询的String属性。使用'IN'运算符是一种奖励!
编辑1:
我正在使用spring-data-neo4j 2.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
,但这根本不起作用。
答案 0 :(得分:0)
您是否尝试仅针对数据库执行查询?使用neo4j-shell,neoclipse还是服务器?或者以编程方式进行单元测试?如果您的节点和关系存在以及它们具有哪些属性,还要检查数据库。
索引与您的查询无关。
枚举在属性中存储为字符串。
一些注意事项:
neo4j console中的这个例子表明它有效。您使用的是什么版本的Neo4j?
答案 1 :(得分:0)
Gillaume:
你发现了一个弱点;我提出了一个问题,这将很快得到解决。你可以在这里跟踪它:
https://jira.springsource.org/browse/DATAGRAPH-281
此致
拉塞
答案 2 :(得分:0)
@Guillaume,
这样做完成:https://jira.springsource.org/browse/DATAGRAPH-281
它可在构建快照中使用,并将在SDN 2.1.RC4 / GA
中此致
拉塞