#kotlin #neo4j #cypher #spring-data-neo4j
#kotlin #neo4j #шифр #spring-data-neo4j
Вопрос:
Доступ к Neo4j в Kotlin с использованием SDN, у меня есть объект с отношениями, который я использую только для чтения из БД. Выглядит примерно так:
@NodeEntity
class Parent() {
@Relationship(type = "CHILD_OF", direction = Relationship.INCOMING)
lateinit var children: List<Child>
...
Я использую пользовательский запрос с необязательным совпадением для извлечения этих объектов. Это выглядит так (фактический запрос более сложный, но это проблемная часть):
MATCH (parent:Parent) WHERE ID(parent) IN $parentIds
OPTIONAL MATCH (parent)<-[r1:CHILD_OF]-(child:Child)
RETURN DISTINCT parent, child, r1
Когда есть дочерние элементы, связанные с родительским элементом, возвращаемым запросом, он работает нормально. Однако, когда у родителя нет дочерних элементов, и я пытаюсь получить доступ parentObject.children
, я получаю:
kotlin.UninitializedPropertyAccessException: lateinit property children has not been initialized
Я бы хотел, чтобы, когда запрос не возвращает связанных Child
объектов, children
поле должно быть пустым списком, а не отключенным.
Есть ли у меня способ указать Cypher query или SDN для этого?
Ответ №1:
Это можно решить, установив значение для поля при построении следующим образом:
var children: List<Child> = emptyList() // Default value used when there's no children
Однако я предпочитаю такой lateinit var
подход, поэтому, если есть способ заставить его работать, я хотел бы знать, что это такое.
Комментарии:
1. Я считаю, что нет другого способа, кроме как написать свой собственный getter / setter и инициализировать его