gpt4 book ai didi

mongodb - Spring-data 2.1 使用 kotlin 获取 "UnsupportedOperationException: No accessor to set property"

转载 作者:行者123 更新时间:2023-12-04 01:45:54 24 4
gpt4 key购买 nike

环境:
Spring-boot 2.1.2.RELEASE,
Spring-data 2.1.4.RELEASE,
Kotlin 1.2.x ~ 1.3.x,
MongoDB。

我定义了一个模型类,如:

@Document
class MeAccount : Setting() {

lateinit var id: String

val accountEntries = listOf<BankAccount>()
}

当我试图从 mongodb 读取这个模型时,我得到了异常堆栈跟踪:
java.lang.UnsupportedOperationException: No accessor to set property private final java.util.List com.xxx.MeCustodianAccount.accountEntries!
at com.xxx.MeCustodianAccount_Accessor_fs514j.setProperty(Unknown Source)
at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:61)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readProperties(MappingMongoConverter.java:378)

请注意,该代码适用于 spring-boot 1.5.x 和 spring-data 1.x。

我能做些什么来解决这个问题?
下面似乎有很多类似的异常报告:

Spring boot 2.1.0 security change with kotlin data class?

https://github.com/arangodb/spring-data/issues/123

https://github.com/spring-projects/spring-boot/issues/15698

[已解决] 回退到 Spring-boot 2.0.x 和 spring-data-commons 2.0.x 后有效。 将在 future 的升级计划中排除 2.1。

最佳答案

2.1 中的 Spring 数据。改变了它处理实体中最终字段的方式。它不再使用反射来覆盖字段的不变性,这通常是好的。有几种方法可以解决这个问题。

它们在此处描述:https://jira.spring.io/browse/DATACMNS-1374?focusedCommentId=182289&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-182289

以下是 Spring 小伙伴们的推荐:

  1. Add a @PersistenceConstructor to construct the entity that sets immutable fields.
  2. Add wither methods (MyEntity withXxx(…)) to create a new instance that contains the changed property value.
  3. Alternatively: Use Kotlin's data class feature. This will basically do the same as wither methods.


所以你应该像这样工作:

@Document
data class MeAccount(val id: String, val accountEntries: List<Price>) : Setting()

关于mongodb - Spring-data 2.1 使用 kotlin 获取 "UnsupportedOperationException: No accessor to set property",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com