Как исправить «сущность отношения не может иметь отсутствующий начальный или конечный узел», когда я добавляю расширенные отношения между узлами? - PullRequest
0 голосов
/ 21 мая 2019

Я использую Java Neo4j OGM в своем приложении Kotlin. Я должен добавить isUnit отношение между двумя узлами (Query и Unit). Это объект с богатыми отношениями IsUnit со свойством value. Почему я получаю Relationship entity ogm.relationships.IsUnit@121de1de cannot have a missing start or end node ошибку при сохранении?

Neo4j версия: 3.5.3 (предприятие) Версия OGM: 3.1.2

Query.kt:

package ogm.nodes

import ...

@NodeEntity
class Query() {
    <...>

    @Relationship(type = RelationType.IS_UNIT, direction = Relationship.OUTGOING)
    var units: MutableSet<IsUnit> = mutableSetOf()

    <...>
}

Unit.kt:

package ogm.nodes

import ...

@NodeEntity
class Unit() {
    <...>

    @JsonIgnore
    @Relationship(type = RelationType.IS_UNIT, direction = Relationship.INCOMING)
    var query: IsUnit? = null

    <...>
}

IsUnit.kt:

package ogm.relationships

import ...

@RelationshipEntity(type = RelationType.IS_UNIT)
class IsUnit() {
    @Id
    @GeneratedValue
    private var id: Long? = null
    fun getId(): Long? = id

    var uuid: String? = null
    var value: Float? = null

    @StartNode
    var rate: Rate? = null
    @StartNode
    var query: Query? = null
    @EndNode
    var unit: Unit? = null
}

Логика:

val unit = session.loadAll(
    Unit::class.java,
    Filter("uuid", ComparisonOperator.EQUALS, uuid),
    0
).first()

val isUnit = IsMUnit()
isUnit.query = query
isUnit.unit = unit
isUnit.value = v

query.units.add(isUnit)
unit.query = isUnit

session.save(query, 1)

Я ожидаю, что будут созданы новые отношения между существующими узлами. Но я получил:

org.neo4j.ogm.exception.core.MappingException: Relationship entity ogm.relationships.IsMeasureUnit@121de1de cannot have a missing start or end node
    at org.neo4j.ogm.context.EntityGraphMapper.haveRelationEndsChanged(EntityGraphMapper.java:546)
    at org.neo4j.ogm.context.EntityGraphMapper.getRelationshipBuilder(EntityGraphMapper.java:504)
    at org.neo4j.ogm.context.EntityGraphMapper.link(EntityGraphMapper.java:464)
    at org.neo4j.ogm.context.EntityGraphMapper.mapEntityReferences(EntityGraphMapper.java:389)
    at org.neo4j.ogm.context.EntityGraphMapper.mapEntity(EntityGraphMapper.java:237)
    at org.neo4j.ogm.context.EntityGraphMapper.map(EntityGraphMapper.java:131)
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:79)
    at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:474)
    at queryProcessor.QueryProcessor.changeQuery(QueryProcessor.kt:117)
    at queryProcessor.QueryProcessor.process(QueryProcessor.kt:24)
    at com.pathfind.ApplicationKt$module$5$3.invokeSuspend(Application.kt:74)
...

Я пробовал другую глубину sessiuon.save() метода, но он все еще не работает.

Спасибо всем заранее.

1 Ответ

0 голосов
/ 21 мая 2019

Кажется, что объекты с богатыми отношениями могут иметь только один @StartNode и @EndNode. Это правда? Что если мне понадобятся одинаковые отношения между разными типами узлов? Нужно ли дублировать код?

...