У меня есть существующий запрос 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)
Есть ли какие-либо указатели на то, что мне нужно изменить в запросе?
Обновления
Класс пользователя
@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
}