我正在尝试从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)
所以现在我尝试使用直接DBCollection从MongoTemplate获取给定的持久实体。如果这个API是唯一的方法,需要一些指导吗?/何时支持在GORM中批量插入api或者还有其他解决方法吗?
感谢。