【问题标题】:Neo4J - Simple cypher queryNeo4J - 简单的密码查询
【发布时间】:2012-10-16 17:28:27
【问题描述】:

假设有两个节点实体:

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;嵌套异常应为字符串

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

【问题讨论】:

  • 请说明使用的 Neo4j 版本,这很重要。
  • 我正在使用 neo4j 1.8.M07,spring-data-neo4j 2.1.0.BUILD-SNAPSHOT
  • 请接受您自己的回答或回答(并接受)。看起来你有一个解决方案(“我把它改成......一切都很好”),最好能解决这个问题!

标签: spring neo4j spring-data-neo4j


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    马库斯,

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

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

    问候,

    拉斯

    【讨论】:

    • 嘿 Lasse,感谢您的帮助..我切换到当前版本,但我的查询似乎是错误的。我将其更改为“START role=node({0}) MATCH account-[:HAS_ROLE]->role return account”(感谢 Michael Hunger),一切都很好......真的必须做一些 Neo4j 功课......
    【解决方案3】:

    使用这个查询怎么样?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多