2012-10-16 53 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'