首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我在节点之间添加丰富的关系时,如何修复“关系实体不能有缺失的起始或结束节点”?

当我在节点之间添加丰富的关系时,如何修复“关系实体不能有缺失的起始或结束节点”?
EN

Stack Overflow用户
提问于 2019-05-22 03:23:46
回答 1查看 145关注 0票数 0

我在我的Neo4j应用程序中使用了Java。我必须在两个节点(QueryUnit)之间添加一个isUnit关系。它是一个具有属性value的富关系实体IsUnit。为什么我在保存时出现Relationship entity ogm.relationships.IsUnit@121de1de cannot have a missing start or end node错误?

Neo4j版本: 3.5.3 (企业版) OGM版本: 3.1.2

Query.kt:

代码语言:javascript
复制
package ogm.nodes

import ...

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

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

    <...>
}

Unit.kt:

代码语言:javascript
复制
package ogm.nodes

import ...

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

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

    <...>
}

IsUnit.kt:

代码语言:javascript
复制
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
}

逻辑:

代码语言:javascript
复制
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)

我希望在现有节点之间创建新的关系。但是我得到了:

代码语言:javascript
复制
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()方法,但仍然不起作用。

提前感谢大家。

EN

回答 1

Stack Overflow用户

发布于 2019-05-22 03:28:29

看起来富关系实体只能有一个@StartNode和@EndNode。是真的吗?如果我需要不同节点类型之间的相同关系怎么办?我必须复制代码吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56245140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档