2012-10-16 52 views
2

假设有两个节点实体:Neo4j的 - 简单的暗号查询

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: 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

,因为它似乎有个东西W¯¯荣与我的查询,但我不知道什么,并不能解决它...... 任何人都可以提供一些帮助?

+0

请指定使用的Neo4j的版本,这很重要。 – raina77ow

+0

我正在使用neo4j 1.8.M07,spring-data-neo4j 2.1.0.BUILD-SNAPSHOT –

+0

请接受您的答案或回答(并接受)。它看起来像你有一个解决方案(“我改变了......,一切都很好”),这将是很好的关闭这个问题! – cod3monk3y

回答

0

重写查询这个样子。您已经知道该角色,因此将其用作开始点。

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

马库斯,

您应该迁移到的Neo4j 1.8 GA和SDN 2.1.0发布。

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

问候,

拉塞

+0

嘿Lasse,感谢您的帮助..我切换到当前版本,但我的查询似乎是错误的。我将它改为了“START角色=节点({0})MATCH帐户 - [:HAS_ROLE] - >角色回报帐户”(感谢Michael Hunger),一切都很好......真的必须做一些Neo4j作业...... –

0

如何使用此查询?

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

它会返回所有帐户 'HAS_ROLE'