Попытка исключения повторяющегося определения класса при вставке класса данных в MongoDB - PullRequest
0 голосов
/ 04 апреля 2020

Я делаю некоторые вставки документов 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. Ты хоть представляешь, что происходит не так? Заранее спасибо.

1 Ответ

1 голос
/ 06 апреля 2020

Что мне помогло, так это использование общего класса вместо класса данных. Также изменен тип поля id на var из-за жалоб Spring на окончательное свойство.

Обновление : Spring Boot 2.2.6.RELEASE также исправляет это, так что все еще возможно использовать классы данных для сущностей в средах Spring с несколькими подключениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...