如何在映射的实体中生成非生成的Id

时间:2018-02-11 23:01:04

标签: spring-data-neo4j neo4j-ogm

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

我目前的问题是我需要将id保留原样,以便能够链接不同节点类型的后续记录,但是如果我填充了id' s使用原始值,节点不会在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字段,它只保存实体。

1 个答案:

答案 0 :(得分:1)

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

尝试将字段名称更改为legacyId,并且它应该有效。