【问题标题】:How to have non generated Id's in mapped entities如何在映射实体中拥有未生成的 Id
【发布时间】:2018-02-11 23:01:04
【问题描述】:

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

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

【问题讨论】:

    标签: spring-data-neo4j neo4j-ogm


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2021-09-13
      • 2020-04-02
      相关资源
      最近更新 更多