【问题标题】:org.springframework.data.mapping.MappingException with Kotlin and sealed classesorg.springframework.data.mapping.MappingException 与 Kotlin 和密封类
【发布时间】:2021-02-10 20:27:41
【问题描述】:

我在使用弹簧数据 (elasticsearch) 和 Kotlin 密封类时遇到问题。似乎它正在检测两个 id 映射。类:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type")
@JsonSubTypes(
    JsonSubTypes.Type(value = AbstractSectionV1Dto.HtmlSectionV1Dto::class, name = "HTML"))
sealed class AbstractSectionV1Dto(
    open val number: Int?,
    open val id: Long?,
    open val questionAnswers: List<AbstractQuestionAnswerV1Dto>,
    open val rightQuestionAnswers: Int?,
    open val questionAnswersSize: Int?) : Dto {

data class HtmlSectionV1Dto(
        override val number: Int?,
        override val id: Long,
        override val questionAnswers: List<AbstractQuestionAnswerV1Dto>,
        override val rightQuestionAnswers: Int?,
        override val questionAnswersSize: Int?,
        val html: String?) : AbstractSectionV1Dto(number, id, questionAnswers, rightQuestionAnswers, questionAnswersSize)
(...)
}

当我将文档保存到 elasticsearch 时,我得到了

org.springframework.data.mapping.MappingException: Attempt to add id property private final java.lang.Long com.package.AbstractSectionV1Dto.id but already have property private final long com.package.AbstractSectionV1Dto$TextSectionV1Dto.id registered as id. Check your mapping configuration!

我还尝试仅在顶级课程和两者上设置@Id。有什么线索吗?

【问题讨论】:

    标签: kotlin spring-data


    【解决方案1】:

    我想我是通过将 org.springframework.data.annotation.Transient 放在密封的类 id 中来让它工作的,但如果有人能确认或说出这个问题的最佳解决方案,那就太好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多