【发布时间】: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