Spring 带有 ReactiveMongoRepository 的数据:通用保存

Spring Data with ReactiveMongoRepository: generic saving

我想保存一些值包含泛型的文档。我经常收到 StackOferflowError.

这是我的模型的片段class

data class MyDocument {
    val errors: List<SomeError> = emptyList()
}

SomeError 在接口中,应该由不同类型的错误实现,包括 ValidationError

interface SomeError

data class ValidationError<T: Any>(val objectType: KClass<T>, val objectId: String) : SomeError

我正在尝试使用非空错误列表保存我的对象(使用 ReactiveMongoRespoitory):

myDocumentRepository.save(MyDocument(
     errors = listOf( 
     ValidationError<MyDocument>(objectType = MyDocument::class, objectId = "somedoc")) //as SomeError did not help
))

你知道我该如何改正吗?

这是堆栈跟踪的 psrt:

 java.lang.WhosebugError
at java.base/java.util.HashMap.putVal(HashMap.java:624)
at java.base/java.util.HashMap.putMapEntries(HashMap.java:510)
at java.base/java.util.HashMap.putAll(HashMap.java:780)
at org.springframework.data.util.TypeDiscoverer.resolveType(TypeDiscoverer.java:168)
at org.springframework.data.util.ParameterizedTypeInformation.calculateTypeVariables(ParameterizedTypeInformation.java:269)

你可以这样做:

import org.springframework.data.annotation.Transient

data class ValidationError private constructor(
  private val type: String,
  val objectId: String
) : SomeError {
  constructor(type: KClass<*>, objectId: String) : this(type.qualifiedName!!, objectId)

  @delegate:Transient
  val objectType by lazy {
    this.javaClass.classLoader.loadClass(type).kotlin
  }
}

在内部将 KClass 存储为完全限定名称。