Преобразование узла в объект - PullRequest
0 голосов
/ 12 октября 2018

Как правильно преобразовать StatementResult выполнения Neo4j session в нужный объект или, по крайней мере, в Json, если у меня нет доступа к SessionFactory?

Я делаю этовот так и выглядит неуклюже и многословно:

var session = require(Driver.class).session(); // v1 Driver, v1 Session
try (session) {
    Iterable<Record> iterable =
            () -> session.run(FIND_BY_TITLE_LIKE, Map.of("titleLike", ".*" + titleLike + ".*"));
    var list = StreamSupport
            .stream(iterable.spliterator(), false)
            .map(Record::asMap)
            .map(Map::values)
            .flatMap(Collection::stream) // nodes
            .map(node -> ((InternalNode) node).asMap())
            .collect(Collectors.toList());
    LOGGER.info("Processed list: {}", list);
    return list;
}

Может быть, мне стоит что-нибудь другое Driver или Session для этого?

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете использовать Spring-Data-Neo4j (SDN) для сопоставления результатов запроса с сущностями домена.Вам просто нужны следующие три фрагмента кода.

Репозиторий

@Repository
public interface NodeEntityNameDAO extends Neo4jRepository<NodeEntityName, Long> {
  @Query("MATCH (nodeA:LabelA)<-[:CONTAINS]-(nodeB:LabelB) RETURN nodeA.name AS nodeAName, nodeB.name AS nodeBName;")
  NodeAAndBResult[] getNodeAAndB();
}

Объект результата

@QueryResult
public class NodeAAndBResult {
  private String nodeAName;
  private String nodeBName;

  // omitted default constructor as well getter and setter for clarity
}

Бизнес-логика

NodeAAndBResult[] nodeAAndBResults = nodeEntityNameDAO.getNodeAAndB();

Приложение

Только что нашел замечательную статью 1016 * от @Luanne от GraphAware по той же теме.

...