使用 MongoRepository 保存/插入时出现 StackOverflowError

问题描述

我正在尝试使用 mongo 存储库将包装键值类保存/插入到我的 mongoDB 中。

我试图保存的模型是:

@Data
@AllArgsConstructor
@Document(collection = "futureTask")
public class FutureTask {

    @Id
    private Configuration configuration;
    private ScheduledFuture<?> future;
}

存储库实现如下:

public interface FutureTaskRepository extends MongoRepository<FutureTask,Configuration> {
    FutureTask findByConfiguration(Configuration configuration);

    boolean existsByConfiguration(Configuration configuration);
}

FutureTaskRepository 的调用如下:

ScheduledFuture<?> future = this.schedule(new RunnableTask(configuration),new crontrigger(configuration.getCron()));
FutureTask futureTask = new FutureTask(configuration,future);

futureTaskRepository.insert(futureTask);

我收到以下错误

java.lang.StackOverflowError: null
    at java.base/java.util.concurrent.locks.reentrantreadwritelock$Sync.tryReleaseShared(reentrantreadwritelock.java:427) ~[na:na]
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1382) ~[na:na]
    at java.base/java.util.concurrent.locks.reentrantreadwritelock$ReadLock.unlock(reentrantreadwritelock.java:897) ~[na:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:244) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:206) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:90) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    at org.springframework.data.mapping.context.MappingContext.getrequiredPersistentEntity(MappingContext.java:73) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:694) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:700) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:620) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:596) ~[spring-data-mongodb-3.0.5.RELEASE.jar:3.0.5.RELEASE]

解决方法

monoDB 似乎在像这样持久化对象方面存在问题。 通过使用 synchronizedCollection 存储创建自定义存储库来解决。现在不使用 mongoDB 或任何其他数据库。

select 
    Name,concat_ws('.',max(transform(split(Version,'\\.'),x -> int(x)))) as Version 
from mytable 
group by Name

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...