将数据类插入 MongoDB 时尝试重复类定义异常
Posted
技术标签:
【中文标题】将数据类插入 MongoDB 时尝试重复类定义异常【英文标题】:Attempted duplicate class definition exception when inserting data class to MongoDB 【发布时间】:2020-07-16 13:37:12 【问题描述】:我正在计划任务中插入一些 Spring Data 文档,如下所示:
val session = client.startSession()
val template = MongoTemplate(client, db)
val sessionBoundOps = template.withSession(session)
session.startTransaction()
sessionBoundOps.insert(obj);
session.commitTransaction()
这会导致以下异常:
Unexpected error occurred in scheduled task
java.lang.RuntimeException: java.lang.IllegalStateException: org.springframework.cglib.core.CodeGenerationException: java.lang.LinkageError-->loader org.springframework.boot.loader.LaunchedURLClassLoader @5d3411d attempted duplicate class definition for pw.prj.core.domain.stats.UserDailyStats_Accessor_wvhcc8. (pw.prj.core.domain.stats.UserDailyStats_Accessor_wvhcc8 is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @5d3411d, parent loader 'app')
at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.createAccessorClass(ClassGeneratingPropertyAccessorFactory.java:200)
at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.potentiallyCreateAndRegisterPersistentPropertyAccessorClass(ClassGeneratingPropertyAccessorFactory.java:184)
at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.getPropertyAccessor(ClassGeneratingPropertyAccessorFactory.java:92)
at org.springframework.data.mapping.model.BasicPersistentEntity.getPropertyAccessor(BasicPersistentEntity.java:455)
at org.springframework.data.mapping.model.IdPropertyIdentifierAccessor.<init>(IdPropertyIdentifierAccessor.java:54)
at org.springframework.data.mapping.model.BasicPersistentEntity.getIdentifierAccessor(BasicPersistentEntity.java:471)
at org.springframework.data.mongodb.core.EntityOperations$AdaptibleMappedEntity.of(EntityOperations.java:619)
at org.springframework.data.mongodb.core.EntityOperations$AdaptibleMappedEntity.access$100(EntityOperations.java:598)
at org.springframework.data.mongodb.core.EntityOperations.forEntity(EntityOperations.java:104)
at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1244)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1185)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1170)
at pw.prj.core.infra.persistence.MongoUserDailyStatsPersister$saveStatsAndTransferMoney$1.invoke(MongoUserDailyStatsPersister.kt:44)
at pw.prj.core.infra.persistence.MongoUserDailyStatsPersister$saveStatsAndTransferMoney$1.invoke(MongoUserDailyStatsPersister.kt:18)
at pw.prj.core.infra.TransactionRunner.run(TransactionRunner.kt:20)
...
我的模型是简单的数据类,如下所示:
@Document
@CompoundIndexes(value = [
CompoundIndex(def = "'userId': 1, 'date': 1", unique = true)
])
data class UserDailyStats(
val userId: ObjectId,
val date: Date,
val viewsPerOwnServer: Map<String, Int>,
val adViewsPerOwnServer: Map<String, Int>,
val revenuePerOwnServer: Map<String, String>,
val referralRegistrations: Int,
val referralViews: Int,
val referralAdViews: Int,
val referralRevenue: String,
@Id val id: String? = null
)
Java 12,Spring Boot 2.2.0.M5。你知道出了什么问题吗?提前致谢。
【问题讨论】:
可能与这个***.com/questions/38558290/…有关 【参考方案1】:帮助我的是使用通用类而不是数据类。由于 Spring 对 final 属性的投诉,还将 id
字段类型更改为 var
。
更新:Spring Boot 2.2.6.RELEASE 也修复了这个问题,因此仍然可以在多连接 Spring 环境中为实体使用数据类。
【讨论】:
以上是关于将数据类插入 MongoDB 时尝试重复类定义异常的主要内容,如果未能解决你的问题,请参考以下文章
比较器类在排序时抛出 ClassCastException [重复]