Отношения всегда возвращаются как пустые в данных Spring Neo4J

#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