Я использую 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()
метода, но он все еще не работает.
Спасибо всем заранее.