2

假设有两个节点实体:

public class Account extends BaseEntity
{
...
@Fetch
@RelatedTo(type = "HAS_ROLE")
private Set<Role> roles = Sets.newHashSet();
...
}

public class Role extends BaseEntity
{
...
}

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

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: 执行语句出错 START account=node:Account(0) MATCH account-[:HAS_ROLE]->({0}) return account; 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: Error execution statement START account=node:Account(0) MATCH account-[:HAS_ROLE]->({0}) return account; 嵌套异常是预期的字符串

看来,我的查询有问题,但我不知道是什么,也无法弄清楚......有人可以提供帮助吗?

4

3 回答 3

0

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

@Query("START role=node({0}) MATCH account-[:HAS_ROLE]->role return account")
Iterable<Account> findByRole(Role role);
于 2013-08-19T01:50:08.090 回答
0

马库斯,

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

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

问候,

拉斯

于 2012-10-22T15:04:58.793 回答
0

使用这个查询怎么样?

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

它将返回所有具有“HAS_ROLE”的帐户

于 2013-08-19T01:34:23.033 回答