Запрос Neo4J, чтобы вернуть интересы пользователей и других известных пользователей - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть существующий запрос Neo4, чтобы вернуть интересы пользователей, и если какие-либо из этих интересов связаны.Запрос:

MATCH (u:User)-[r1:INTERESTED_IN]-(i1:Interest)
WHERE u.emailAddress = 'bob@mail.com'
OPTIONAL MATCH (u)-[r2:INTERESTED_IN]-(i2:Interest)
OPTIONAL MATCH (i1)-[r3:RELATED_TO]-(i2)
RETURN u, r1, i1, r2, i2, r3

Это сопоставляется с методом репозитория Spring Data Neo4J следующим образом:

User findInterestsByEmailAddressIgnoreCase(@Param("emailAddress") String emailAddress);

Я хочу расширить график, чтобы пользователи могли знать других пользователей (например, Боб знаетФред и Том и Фред и Том тоже знают друг друга).Как мне изменить тот же запрос, чтобы вернуть эти отношения?

Я попытался добавить необязательное совпадение для пользователя, знающего другого пользователя, следующим образом:

MATCH (u:User)-[r1:INTERESTED_IN]-(i1:Interest)
WHERE u.emailAddress = 'bob@mail.com'
OPTIONAL MATCH (u)-[r2:INTERESTED_IN]-(i2:Interest)
OPTIONAL MATCH (i1)-[r3:RELATED_TO]-(i2)
OPTIONAL MATCH (u:User)-[r5:KNOWS]-(u2:User)
RETURN u, r1, i1, r2, i2, r3, r5, u2

Это похоже на запуск и возвращает график в браузере neo4j, но Spring Data, похоже, не работает сошибка

org.springframework.dao.83)

Есть ли какие-либо указатели на то, что мне нужно изменить в запросе?

Обновления

  1. Класс пользователя

    @NodeEntity
    public class User {
    
    @Id
    @GeneratedValue
    private Long id;
    
    public Long getId() {
        return id;
    }
    
    @Index(unique = true)
    private String emailAddress;
    
    private String name;
    
    @Relationship(type = "INTERESTED_IN", direction = Relationship.OUTGOING)
    private Set<UserInterest> interests = new HashSet<>();
    
    public Set<UserInterest> getInterests() {
        return interests;
    }
    
    public void setInterests(Set<UserInterest> interests) {
        this.interests = interests;
    }
    
    @Relationship(type = "KNOWS", direction = Relationship.UNDIRECTED)
    private Set<RelatedUser> relatedUsers = new HashSet<>();
    
    public Set<RelatedUser> getRelatedUsers() {
        return relatedUsers;
    }
    
    public void setRelatedUsers(Set<RelatedUser> relatedUsers) {
        this.relatedUsers = relatedUsers;
    }
    
    ... additional getters/setters
    
    }
    

1 Ответ

0 голосов
/ 12 ноября 2018

Согласно Spring-data-neo4j docs , правильная сигнатура метода -

// <class> finedBy<property><flags>(<property type> value)
User findByEmailAddressIgnoreCase(String emailAddress) 
...