#neo4j #spring-data-neo4j
Вопрос:
Версия пружинной загрузки: 2.4.6
У меня есть запрос, как найти пользователей по странам:
@Query("MATCH (u:User)-[r:LIVES_IN]->(c:Country) "
"WHERE c.countryCode = $country "
"WITH u "
"MATCH (u)-[p:HAS_FRIENDS]->(:User) "
"RETURN u, collect(p)")
List<User> findByCountry(@Param("country") String country);
Чтобы добавить нового друга:
@Query("CREATE (u:User {name: $friendName}) "
"WITH u "
"MATCH (n:User) WHERE ID(n) = $userId "
"WITH u,n "
"CREATE (n)-[:HAS_FRIENDS]->(u) "
"RETURN n")
User addFriendRelation(@Param("userId") Long userId, @Param("friendName") String friendName);
У меня есть узел, подобный:
@Data //Getter,Setter, ToString, Equals...
@NoArgsConstructor // empty constructor
@Node
public class User
{
@Id
@GeneratedValue
private Long id;
@Property
private String name;
@Relationship(type = "HAS_FRIENDS") // it can be also converted to an entity.
private List<User> friends;
//User lives in these countries...
@Relationship(type = LivesInRelation.TYPE)
private LivesInRelation livesIn;
public User(String name)
{
this.name = name;
}
}
И чтобы проверить это:
@Test
public void testFindByCountry()
{
User user = new User("Bob");
user.setLivesIn(new LivesInRelation(user, new Country("US"), LocalDateTime.of(2000, 1, 1, 1, 1)));
User usedDB = userRepository.saveUser(user);
userService.userRepository(usedDB.getId(), "Marry");
List<User> userListByCountry = userRepository.findByCountry("US");
assertThat(userListByCountry).hasSize(1);
assertThat(userListByCountry.get(0).getFriends()).hasSize(1); //Doesn't work
assertThat(userListByCountry.get(0).getName()).isEqualTo("Bob");
}
Я реализовал это подобным образом. Запросы работают в neo4j-браузере как заклинание. Но на пружинном ботинке это не так.
Итак, как я могу вернуть узел с отношениями? Есть ли какие-нибудь предложения?
Решение:
@Query("MATCH (u:User)-[r:LIVES_IN]->(c:Country) "
"WHERE c.countryCode = $country "
"WITH u "
"MATCH (u)-[p:HAS_FRIENDS]->(x:User) "
"RETURN u, collect(p), collect(x)")
List<User> findByCountry(@Param("country") String country);
Более подробно: https://github.com/spring-projects/spring-data-neo4j/issues/2260
Комментарии:
1. Поперечный столб github.com/spring-projects/spring-data-neo4j/issues/2260