好的,所以我有一个名为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
@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);
}
}
}
@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);