【问题标题】:Updating node without retrieving it first using Neo4j OGM更新节点而不首先使用 Neo4j OGM 检索它
【发布时间】:2018-02-06 11:23:56
【问题描述】:

我有一个结构,它(简化)如下所示:

@NodeEntity(label = "Entity")
class FullEntity {

    @Id @GeneratedValue
    var _id: Long? = null

    @Id @Index(unique = true)
    lateinit var uuid: String

    lateinit var someMoreData: String // this data is sometimes lost

    @Relationship(type = "TARGETS", direction = Relationship.OUTGOING)
    var target: StubEntity? = null
}

@NodeEntity(label = "Entity")
class StubEntity {

    @Id @GeneratedValue
    var _id: Long? = null

    @Id @Index(unique = true)
    lateinit var uuid: String
}

@RepositoryRestResource
interface EntityRepository : Neo4jRepository<FullEntity, Long>

现在,当我独立保存两个相关的 FullEntity 对象时,如果我以一种方式进行操作,则一切正常:

entityRepository.save(FullEntity().apply {
    uuid = "uuid1"
    someMoreData = "SomeMoreData1"
    target = StubEntity().apply {
        uuid = "uuid2"
    }
})
// some time later ...
entityRepository.save(FullEntity().apply {
    uuid = "uuid2"
    someMoreData = "SomeMoreData2"
})

但如果我像这样颠倒顺序:

entityRepository.save(FullEntity().apply {
    uuid = "uuid2"
    someMoreData = "SomeMoreData2"
})
// some time later ...
entityRepository.save(FullEntity().apply {
    uuid = "uuid1"
    someMoreData = "SomeMoreData1"
    target = StubEntity().apply {
        uuid = "uuid2"
    }
})

它会删除"SomeMoreData2"

【问题讨论】:

  • 我可以以某种方式重现您的问题,但需要一些时间来分析。我注意到的一件事是,如果您要激活索引,它不会创建条目,因为您希望 Entity 标记的注释的 uuid 具有唯一性。但是您也可以帮助我理解您的用例:您为什么要定义多个 Id 字段?
  • @meistermeier 实际上我对这个uuid 有唯一的约束(和索引)。 _id 是 Neo 数据库中的内部 id,我并没有真正在任何地方使用。

标签: neo4j spring-data-neo4j neo4j-ogm spring-data-neo4j-5


【解决方案1】:

我发现您的课程和在 OGM 中的使用存在两个问题:

  1. 您使用标签Entity 两次。如果 OGM 会产生问题 尝试从 Neo4j 加载数据。它找不到正确的类型来分配值。可能的解决方法:

    • 将标签显式设置为另一个标签,例如此类的StubEntity

    • 1234563保存数据后在 Neo4j 中不会有任何区别。
  2. 1234563您已经在使用的标签属性)在实现类上。你可以在抽象类中使用 uuid 约束。
  3. 使用@Id 注释两次。如果您只需要索引中的字段和唯一约束(如果我理解您的评论正确),则无需在 uuid 字段上声明额外的@Id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多