Преобразование узла в объект

Как правильно конвертировать? 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 ответ

Вы можете использовать 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();

добавление

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

Другие вопросы по тегам