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

我想保存一些包含通用值的文档。而且我不断收到StackOferflowError

这是我的模型课程的一部分

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
))

你知道我该如何纠正吗?

这是Stack跟踪的psrt:

 java.lang.StackOverflowError
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)
caobin914819 回答:具有ReactiveMongoRepository的Spring数据:通用保存

您可以执行以下操作:

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内部存储为完全限定的名称。

本文链接:https://www.f2er.com/3073308.html

大家都在问