弹簧数据。 Neo4J。如何正确查询带有@RelationshipEntity注释的属性的实体?

时间:2019-01-16 06:17:19

标签: spring-boot neo4j

好的,所以我有一个名为Schedule的实体,它有一个属性,该属性是称为“ volunteers”的志愿者实体的列表。志愿者实体带有@RelationshipEntity注释。我一直试图通过扩展Neo4jRepository类的存储库来检索Schedule实体的列表,但是,当检索Schedules的列表时,即使使用Neo4j浏览器手动测试查询时,志愿者属性始终为空。在那儿。

最初,这种关系要简单得多,Schedule实体具有一个称为自愿者的User实体集合的属性,而我编写的Repository查询可以轻松地检索Schedules并将检索到的Users映射到自愿者属性。但是,当我将关系更改为以@RelationshipEntity注释的POJO时,查询不会将检索到的关系条目映射到志愿者属性。

我知道密码查询是正确的,因为我已经在Neo4j浏览器中对其进行了测试,并且可以正确检索我需要的结果集。

我还尝试创建一个Repository方法,该方法将仅检索Volunteer实体,但它只会返回空集合。

我当前正在使用以下相关库: -spring-boot版本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

这是Schedule实体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);

这是存储库代码,用于检索我需要的Volunteer对象列表:

@Query("MATCH(s:Schedule)<-[v:VOLUNTEERED]-(u:User) " +
        "WHERE s.uuid = {schedUuid} return v")
Set<Volunteer> findVolunteersBySchedule(@Param("schedUuid") String schedUuid);

0 个答案:

没有答案