如何在映射实体中拥有非生成的 ID

How to have non generated Id's in mapped entities

我正在尝试从 RDBMS 导入一堆记录并创建连接的节点 在 neo4j 中使用 Spring Data Neo4j 因为我想定期执行此操作并通过此操作将 Neo4j 数据库与主 RDBMS 中的数据库同步。

我目前的问题是我需要将 id 保持原样,以便我能够 link 不同节点类型的后续记录,但是如果我用Neo4j 中未创建节点的原始值。 我拥有的一个示例实体是:

@NodeEntity
data class CarAgent(
        @Id 
        override var id: Long? = null,
        var name: String = "",
        var country: String = "",
        var desc: String = "",
        var status: Boolean = false,
        var xmlType: String = "",
        var company: String) : Entity

导入逻辑正在做:

@Suppress("UNCHECKED_CAST")
fun processRow(exchange: Exchange) {
    val message = exchange.`in`.body as List<String>
    val id = message[0]
    val name = message[1]
    val country = message[4]
    val desc = message[19]
    val status = message[20]
    val xml = message[25]
    val company = message[31]
    val carAgent = CarAgent(
            id = id.toLong(),
            name = name,
            country = country,
            desc = desc,
            status = status.toBoolean(),
            xmlType = xml,
            company = company)
    carAgentDataRepository.save(carAgent)
}

如果我将注解@GeneratedValue 添加到Id 字段,它只会保存实体。

在实体中,Long id 字段被 OGM/SDN 视为特殊字段。它映射到数据库内部节点 ID。此行为继承自以前的 OGM 版本。

尝试将字段名称更改为类似 legacyId 的名称,它应该可以工作。