使用grails mongodb插件批量插入

时间:2013-10-12 03:42:15

标签: mongodb grails

我正在尝试从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或者还有其他解决方法吗?

感谢。

0 个答案:

没有答案