2012-10-16 5 views
2

은 가정 간단한 사이퍼 쿼리 두 개의 노드 실체가 :Neo4J -

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

그러나이 쿼리 :

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

public class Role extends BaseEntity 
{ 
... 
} 

, 나는 주어진 역할의 모든 계정을 얻어야한다 쿼리가 작동하지 않습니다. 테스트 케이스에서이 메서드를 사용하면 다음과 같은 오류가 발생합니다.

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

내 검색어와 함께 rong,하지만 난 뭘 모르겠지만 아직 그것을 알아낼 수 없습니다 ... 누구 도움을 줄 수 있을까요?

+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

안녕하세요 라세, 도와 줘서 고마워. 현재 릴리스로 바꿨지 만, 내 쿼리가 틀린 것처럼 보였다. 나는 "START role = node ({0}) MATCH 계정 - [: HAS_ROLE] -> role return account"(Thanks Michael Hunger)로 변경했고 모든 것이 괜찮습니다 ... 정말 Neo4j 숙제를해야합니다 ... –

0

방법이 쿼리를 사용하는 방법에 대해?

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

는 모든 계정을 반환 할 것이다이 같은 'HAS_ROLE'