Сейчас из-за открытым вопрос GitHub https://github.com/neo4j/neo4j-ogm/issues/215 в Neo4j OGM я должен использовать следующий метод обход для того, чтобы преобразовать org.neo4j.ogm.session.Session.query
результат, который возвращает @QueryResult
в список этого @QueryResult
:SDN4, Neo4j OGM @QueryResult Session.query и Pagable
Пример Cypher запроса:
MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User) WHERE id(parentD) = {decisionId} OPTIONAL MATCH (childD)<-[:VOTED_FOR]-(vg:VoteGroup)-[:VOTED_ON]->(c:Criterion) WHERE id(c) IN {criteriaIds} WITH childD, ru, u, vg.avgVotesWeight as weight OPTIONAL MATCH (childD)<-[:SET_FOR]->(sortValue375:Value)-[:SET_ON]->(sortCharacteristic375:Characteristic) WHERE id(sortCharacteristic375) = 375 RETURN childD AS decision, ru, u, toFloat(sum(weight)) as weight, sortValue375 ORDER BY weight DESC, sortValue375.value DESC, childD.createDate DESC SKIP 0 LIMIT 1000
Обход:
@QueryResult
public class WeightedDecision {
private Decision decision;
private Double weight;
...
}
Result queryResult = session.query(characteristicCypher, parameters);
List<WeightedDecision> weightedDecisions = new ArrayList<>();
for (Map<String, Object> result : queryResult) {
WeightedDecision weightedDecision = new WeightedDecision();
weightedDecision.setDecision((Decision) result.get("decision"));
weightedDecision.setWeight((double) result.get("weight"));
weightedDecisions.add(weightedDecision);
}
Сейчас в вместо List<WeightedDecision>
Я должен вернуть Page<WeightedDecision>
Как это можно сделать? Пожалуйста, помогите мне изменить код, чтобы перевести queryResult в Page<WeightedDecision>
Также, как обеспечить countQuery
в этой логике?
Спасибо за ваш ответ. Можно ли перевести, например, новый PageRequest (0, 1000) в SKIP 0 LIMIT 1000, или я должен сделать некоторую математику в параметрах PageRequest.page, PageRequest.size, прежде чем переводить ее в соответствующие Cypher SKIP и LIMIT? – alexanoid
Это зависит от того, что вы хотите со страницы. Если ваша единственная задача - вернуть страницу вместо списка, тогда было бы нормально использовать пропуск и ограничение в вашем запросе и поместить полные результирующие данные в объект страницы. –
Спасибо за помощь! – alexanoid