Neo4J - 简单的密码查询

时间:2012-10-16 17:28:27

标签: spring neo4j spring-data-neo4j

假设有两个节点实体:

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

public class Role extends BaseEntity
{
...
}

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

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帐户=节点:帐户(0)匹配帐户 - [:HAS_ROLE] - &gt;({0})返回帐户;嵌套异常是org.springframework.dao.InvalidDataAccessResourceUsageException:执行语句错误START account = node:Account(0)MATCH帐户 - [:HAS_ROLE] - &gt;({0})返回帐户;嵌套异常是预期的字符串

看来,我的查询有问题,但我不知道是什么,而且还不能弄明白...... 有人可以提供一些帮助吗?

3 个答案:

答案 0 :(得分:0)

马库斯,

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

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

此致

拉​​塞

答案 1 :(得分:0)

如何使用此查询?

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

将返回所有帐户都有'HAS_ROLE'

答案 2 :(得分:0)

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

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