我正在使用Spring Neo4j 3.3版本并通过cypher创建实体。我有Repo类,我想获取下面但是收到错误
引起:java.lang.RuntimeException:无法从具有多个元素的Iterable中提取单个值。 在org.springframework.data.neo4j.conversion.DefaultConverter.extractSingle(DefaultConverter.java:61)〜[spring-data-neo4j-3.3.0.RELEASE.jar:na] 在org.springframework.data.neo4j.conversion.DefaultConverter.extractValue(DefaultConverter.java:52)〜[spring-data-neo4j-3.3.0.RELEASE.jar:na] 在org.springframework.data.neo4j.conversion.DefaultConverter.convert(DefaultConverter.java:41)〜[spring-data-neo4j-3.3.0.RELEASE.jar:na] 在org.springframework.data.neo4j.support.conversion.EntityResultConverter.convert(EntityResultConverter.java:165)〜[spring-data-neo4j-3.3.0.RELEASE.jar:na] 在org.springframework.data.neo4j.conversion.QueryResultBuilder $ 1.underlyingObjectToObject(QueryResultBuilder.java:86)〜[spring-data-neo4j-3.3.0.RELEASE.jar:na]
ReservRepo :
@Query("MATCH (guest:Guest)-[rel:GUEST_RESV]->(reserv:Reserv)-[histRel:RESV_HISTORY]->(resvhistory:ReservHistory) WHERE reserv.id={0} "
+ " Return guest , COLLECT(resvhistory) as history ")
Collection<GuestHistory> getGuestReservationHist(String reservId);
@QueryResult
public interface GuestHistory {
@ResultColumn("guest")
GuestProfile getGuest();
@ResultColumn("history")
List<ReservHistory> getHistory();
}
/* Fetching Guest History object */
Iterator<GuestHistory> iterator = historyObj.iterator();
while (iterator.hasNext()) {
GuestHistory hist = iterator.next();
reservation.setGuest_firstName(hist.getGuest().getFirstName());
reservation.setGuest_lastName(hist.getGuest().getLastName());
reservation.setGuest_mobile(hist.getGuest().getMobile());
reservation.setGuest_email(hist.getGuest().getEmailId());
reservation.setVIP(hist.getGuest().getIsVip());
for(ReservHistory history:hist.getHistory()){ /*hist.getHistory() :Error*/
System.out.println("---history---"+history);
}
resevation.add(reservation);
}
请指导我如何从这里开始或者分享任何例子
答案 0 :(得分:0)
Cypher查询返回多行,但您要求SDN将其映射到单个GuestHistory
。尝试
@Query("MATCH (guest:Guest)-[rel:GUEST_RESV]->(reserv:Reserv)-[histRel:RESV_HISTORY]->(resvhistory:ReservHistory) WHERE reserv.id={0} "
+ " Return guest , COLLECT(resvhistory) as history ")
Collection<GuestHistory> getGuestReservationHist(String reservId);