Преобразование узла в объект
Как правильно конвертировать? 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 на ту же тему.