关于 spring:Neo4J – 简单的密码查询

Neo4J - Simple cypher query

假设有两个节点实体:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Account extends BaseEntity
{
...
@Fetch
@RelatedTo(type ="HAS_ROLE")
private Set<Role> roles = Sets.newHashSet();
...
}

public class Role extends BaseEntity
{
...
}

在我的存储库中,我有一个查询应该按给定角色获取所有帐户:

1
2
3
4
5
public interface AccountRepository extends GraphRepository<Account>
{
    @Query("START account=node:Account(0) MATCH account-[:HAS_ROLE]->({0}) return account")
    Iterable<Account> findByRole(Role role);
}

但是这个查询不起作用,当我在我的测试用例中使用这个方法时,我得到以下错误:

org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement START account=node:Account(0) MATCH account-[:HAS_ROLE]->({0}) return account; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement START account=node:Account(0) MATCH account-[:HAS_ROLE]->({0}) return account; nested exception is expected string

看来,我的查询有问题,但我不知道是什么,也无法弄清楚...
谁能提供一些帮助?


像这样重写您的查询。您已经知道该角色,因此请将其用作起点。

1
2
@Query("START role=node({0}) MATCH account-[:HAS_ROLE]->role return account")
Iterable<Account> findByRole(Role role);

使用这个查询怎么样?

1
START account=node(*) MATCH (account)-[r:HAS_ROLE]->() return account

将返回所有具有"HAS_ROLE"的帐户


马库斯,

您应该迁移到 Neo4j 1.8 GA 和 SDN 2.1.0 RELEASE。

另外,您的 BaseEntity 和 Role 类是什么样的?

问候,

拉塞