如何使用COLLECT

时间:2015-06-23 08:09:23

标签: spring neo4j spring-data-neo4j

我正在使用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);

        }

请指导我如何从这里开始或者分享任何例子

1 个答案:

答案 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);