Grails + Mongodb =不持久对象。为什么?

时间:2013-10-14 20:12:06

标签: mongodb grails

我的grails + mongodb首次出现。我在保存对象方面遇到了问题。首先,我将本地mongo db以这种方式连接到grails:

grails {
    mongo {
        host = "localhost"
        //port = 27107
        //username = "login"
        //password="pwd"
        databaseName = "db"
     }
}

我不知道为什么,但如果我指定端口和登录+密码(我用这样的密码创建这样的用户),grails给我一个错误,无法连接到mongodb。这是守护进程启动时mongodb的日志: 22:47:04 [initandlisten] MongoDB启动:pid = 918 port = 27017 dbpath = / var / lib / mongodb 64位主机= ubnt-VirtualBox

好的,没有端口和登录+传递它的工作原理。接下来我创建域名:

class Cover {
    String name
    String url

    static constraints = {
        name(blank: false)
        url(blank: false)
    }

    static mapping = {
        collection "cover"
        database "covers"
    }
}

我试着保存它:

Cover cover = new Cover()
cover.name = title.text()
cover.url = url
println("Try to save object: ${cover.toString()}")
cover.save()
println("After save object: ${cover.toString()}")

我在输出中有什么:

Try to save object: com.mydomain.Cover : (unsaved)
After save object: com.mydomain.Cover : 23

当我使用命令'mongo'运行shell时,请尝试:

>use covers
>db.cover.find()

我看到收集中没有任何内容。但是当我看到db.cover.next_id.find()时,我看到23.所以看起来像id递增。我无法弄清楚为什么对象没有保存到mongodb。为什么?在我尝试连接到mongodb并通过java驱动程序保存并保存工作之前(所以mongodb似乎正确安装)。

另外,当我运行shell时,我看到这样的信息>连接到:test是什么意思测试?我可以在哪里配置它?可能是shell连接到一个db并且grails到另一个?

2 个答案:

答案 0 :(得分:0)

对我而言,除非你遇到一些约束错误,否则它似乎没有问题。 保存/验证后是否尝试打印错误?

println cover.errors

此外,您可以尝试从应用程序中恢复所有实例,而无需使用

查看mongo
println Cover.list()

如果使用这最后一行你可以看到你保存的实例,也许grails就像你在databaseName = db中那样混合数据库,你后来说Cover应该保存到涵盖数据库

答案 1 :(得分:0)

我发现了一个错误,它发现我在src / groovy中的源必须以特定的方式访问grails源,所以为了保存封面我需要在grails中创建服务,我在cna实现save方法,然后他们在我要打电话的地方保存我应该以这种方式获得服务

def ctx = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
CoverService coverService = ctx.coverService

现在它有效。