【发布时间】:2011-10-14 21:39:05
【问题描述】:
我正在尝试使用 GORM 为 Mongo 的低级 API 进行安全插入。
我在一个干净的 Grails 项目中重现了这个问题,如下所示:
- 创建一个新的 Grails 项目
- 卸载 Hibernate 插件
- 为 Mongo 插件安装 GORM
-
使用以下操作创建控制器
import com.mongodb.* class TestController { def mongo def index = { def database = mongo.getDB("ExampleDatabase") def collection = database.getCollection("ExampleCollection") def document = new BasicDBObject(); document.put("key", "value") collection.insert(document, WriteConcern.SAFE) render "" } } -
触发动作时,抛出以下异常:
2011-07-27 12:53:03,161 [http-8080-1] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /WriteConcern.SAFE-test/test/index Stacktrace follows: groovy.lang.MissingPropertyException: No such property: value for class: com.mongodb.WriteConcern at com.gmongo.internal.Patcher$__converAllCharSeqToString_closure2.doCall(Patcher.groovy:81) at com.gmongo.internal.Patcher._converAllCharSeqToString(Patcher.groovy:80) at com.gmongo.internal.Patcher$_converAllCharSeqToString.callStatic(Unknown Source) at com.gmongo.internal.Patcher$_converAllCharSeqToString.callStatic(Unknown Source) at com.gmongo.internal.Patcher._convert(Patcher.groovy:69) at com.gmongo.internal.Patcher$_convert.callStatic(Unknown Source) at com.gmongo.internal.Patcher$__patchInternal_closure1.doCall(Patcher.groovy:31) at writeconcern.safe.test.TestController$_closure1.doCall(TestController.groovy:17) at writeconcern.safe.test.TestController$_closure1.doCall(TestController.groovy) at java.lang.Thread.run(Thread.java:680) -
如果我将操作更改为使用 Mongo Java API,如下所示:
def index = { def database = new Mongo().getDB("ExampleDatabase") def collection = database.getCollection("ExampleCollection") def document = new BasicDBObject(); document.put("key", "value") collection.insert(document, WriteConcern.SAFE) render "" } 现在它可以工作了,文档按预期保存到 Mongo 数据库中。
我的问题是:这是 GMongo 包装器的错误,或者应该如何使用低级 API 完成安全写入?
【问题讨论】:
标签: grails mongodb grails-orm