Весна-данные. Neo4j. Как правильно запросить объект с атрибутом, помеченным @RelationshipEntity? - PullRequest
0 голосов
/ 16 января 2019

Хорошо, у меня есть объект под названием «Расписание», и у него есть атрибут, который представляет собой список объектов-добровольцев, называемых «добровольцами». Субъект добровольца имеет аннотацию @RelationshipEntity. Я пытался получить список сущностей Schedule через репозиторий, расширяющий класс Neo4jRepository, но при получении списка расписаний атрибут волонтеров всегда пуст, хотя при тестировании запроса вручную с помощью браузера Neo4j ожидаемый набор результатов там.

Первоначально отношения были намного проще: сущность Schedule имела свойство набора сущностей User, называемых добровольцами, а написанный мной репозиторий-запрос легко извлекал расписания и сопоставлял извлеченные пользователи с атрибутом волонтеров. Но когда я изменил отношение к POJO, аннотированному с помощью @RelationshipEntity, запрос не сопоставляет извлеченные записи отношений с атрибутом волонтеров.

Я знаю, что запросы шифров верны, потому что я проверил их в браузере Neo4j, и он правильно извлекает нужный мне набор результатов.

Я также пытался создать метод Repository, который будет извлекать только объекты добровольцев, но он также просто возвращает пустые коллекции.

В настоящее время я использую следующие связанные библиотеки: - весенне-загрузочная версия 2.0.3.RELEASE - spring-boot-starter-data-neo4j 2.0.3.RELEASE - neo4j-ogm-core 3.1.0 - neo4j-ogm-api 3.1.0

Это объект расписания POJO:

@Data
@EqualsAndHashCode(callSuper = false, exclude = "volunteers")
@NodeEntity
public class Schedule {

    @Id
    @GeneratedValue(strategy = UuidStrategy.class)
    private String uuid;

    private String description;

    private Date startTime;

    private Date endTime;

    @Relationship(type = "VOLUNTEERED", direction = Relationship.INCOMING)
    private Set<Volunteer> volunteers = new HashSet<>();

    public void addVolunteer(Volunteer volunteer){
        if (volunteer != null && this.volunteers != null){
            this.volunteers.add(volunteer);
        }
    }
}

Это POJO, хранящий детали отношений:

@Data
@EqualsAndHashCode(callSuper = false, exclude = "schedule")
@RelationshipEntity(type = "VOLUNTEERED")
public class Volunteer {

    public Volunteer(Schedule schedule, User user){
        this.schedule = schedule;
        this.user = user;
        this.signUpDate = new Date();
    }

    @Id
    @GeneratedValue(strategy = UuidStrategy.class)
    private String uuid;

    @StartNode
    private Schedule schedule;

    @EndNode
    private User user;

    private Date signUpDate;

}

Это код репозитория, который возвращает список расписаний, которые мне нужны:

@Query("MATCH(s:Schedule)<-[v:VOLUNTEERED]-(u:User) " +
        "WHERE u.uuid = {userUuid} return s, v, u")
List<Schedule> findSchedulesByVolunteer(@Param("userUuid") String userUuid);

Это код репозитория, который предполагает получение списка нужных мне объектов добровольцев:

@Query("MATCH(s:Schedule)<-[v:VOLUNTEERED]-(u:User) " +
        "WHERE s.uuid = {schedUuid} return v")
Set<Volunteer> findVolunteersBySchedule(@Param("schedUuid") String schedUuid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...