我正在尝试从 GORM - MongoDB 插件中执行 DBCollection.insert(List, WriteConcern) 但我没有找到任何执行此操作的 API。当我们需要插入超过 80,000 条记录时,单个域保存会花费太多时间。
我还在默认映射中将我的所有 grails 域对象设置为无状态。
当我尝试使用以下代码获取 MongoTemplate 并将其用于批量插入时:
MongoDatastore datastore = (MongoDatastore)appContext.mongoDatastore
MongoTemplate mongoTemplate = datastore.getMongoTemplate(domainClass.gormPersistentEntity)
mongoTemplate.setWriteConcern(WriteConcern.JOURNAL_SAFE);
def converter = mongoTemplate.converter
MongoSession mongoSession = (MongoSession)datastore.currentSession
def collectionName = mongoSession.getCollectionName(domainClass.gormPersistentEntity)
def collectionObject = getCollectionForEntity(mongoSession, mongoTemplate,domainClass.gormPersistentEntity )
mongoTemplate.doInsertBatch(collectionName, dataToInsert, converter)
我得到的错误是: StackoverflowException :
Caused by: java.lang.StackOverflowError
at java.util.HashMap$EntryIterator.<init>(HashMap.java:932)
at java.util.HashMap$EntryIterator.<init>(HashMap.java:932)
at java.util.HashMap.newEntryIterator(HashMap.java:946)
at java.util.HashMap$EntrySet.iterator(HashMap.java:1050)
at java.util.AbstractMap.hashCode(AbstractMap.java:492)
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
at org.springframework.data.util.TypeDiscoverer.hashCode(TypeDiscoverer.java:485)
at org.springframework.data.util.ClassTypeInformation.hashCode(ClassTypeInformation.java:39)
at java.util.HashMap.hash(HashMap.java:351)
at java.util.HashMap.getEntry(HashMap.java:443)
at java.util.HashMap.get(HashMap.java:405)
at org.springframework.data.convert.MappingContextTypeInformationMapper.createAliasFor(MappingContextTypeInformationMapper.java:63)
at org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:177)
at org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:165)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.addCustomTypeKeyIfNecessary(MappingMongoConverter.java:613)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:440)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:379)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:366)
因此,现在我尝试在从 MongoTemplate 获取给定持久实体后使用直接 DBCollection。如果此 API 是唯一继续进行的方法,需要一些指导吗?/ GORM 中的批量插入 api 何时会受到支持,或者是否有其他解决方法?
谢谢。