假设有两个节点实体:
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})返回帐户;嵌套异常是预期的字符串
看来,我的查询有问题,但我不知道是什么,而且还不能弄明白...... 有人可以提供一些帮助吗?
答案 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);