Grails Mongodb插件无法保存

时间:2015-10-27 13:52:26

标签: mongodb grails gorm

我的grails应用程序中有一个要求是连接到现有的mongodb服务器。我正在使用插件':mongodb:3.0.3'来执行此操作。我有一个基本上为空的域类

 class Thing {
    static mapWith = "mongo"

    String id
    String name

    static constraints = { }

    static mapping = {
        collection "myThing"
        id column: '_id', generator: 'assigned'
        version false
    }
}

我正在尝试在集成测试中保存新的域对象 - 控制器操作的前身:

def "create the thing"() {
    def thing = new Thing(name: "name", id:"foobar")

    when:
    def foo = thing.save(flush: true, failOnError:true)

    then:
    Thing.findByName("name")
}

测试失败,因为Thing.findByName返回null,但是,当我深入了解低级API时,我可以保存一个对象。以下测试通过:

def "create the thing low level"() {
    when:
    Thing.collection.insert([name:"name"])

    then:
    Thing.findByName("name")
}

我已经查看了其他stackoverflow问题,他们似乎在处理:

  • 不使用flush,我
  • 没有配置设置属性,我这样做是因为我从中获取了记录,并且低级API工作。
  • 自failOnError为真后我没有的约束错误

我做错了什么?如何让GORM保存工作,因为我想使用可用的grails工具。

注意:这不仅仅是一个测试问题,尝试使用GORM在控制器中保存内容也不起作用。调用此操作:

def save() {
    def thing = new Thing()
    thing.name = "foobar"
    respond thing.save(failOnError: true, flush: true)
}

返回{ "class": "com.Thing", "id": null, "name": "foobar" },看看数据库告诉我它没有保存。

1 个答案:

答案 0 :(得分:0)

您必须在集成测试的顶部添加此行,它应该开始保存。默认情况下,即使在IntegrationTests

中,GORM也不会保留
static Boolean transactional = false

你的测试看起来像下面的那样,

class TestIntegrationSpec extends IntegrationSpec {
   static Boolean transactional = false

   def "my test"() {
     ...
   }
   ...
}