2013-10-14 26 views
1

我在grails + mongodb中有第一个expire。我在保存对象时遇到问题。首先,我连本地蒙戈DB以这样的方式的Grails:Grails + Mongodb =不要坚持对象。为什么?

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

我不知道为什么,但如果我指定端口和登录+密码(我创建这样的密码这样的用户),Grails的给我一个错误,不能连接到mongodb。这是mongodb的对守护程序开始日志: 22时47分04秒[initandlisten] MongoDB的起点:PID = 918端口= 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 

当我运行命令 '蒙戈' 壳,然后再尝试到:

>use covers 
>db.cover.find() 

我看到有nothi集合中。但是,当我看着db.cover.next_id.find(),我看到23.所以它看起来像id增量。我不知道为什么对象没有保存到mongodb。为什么?在尝试连接到mongodb并通过java驱动程序保存并保存工程之前(因此mongodb似乎正确安装)。

另外,当我运行shell我看到这样的信息>连接到:测试什么意思测试?我可以在哪里配置它?可能是壳连接到一个数据库和grails到另一个?

回答

0

我发现一个错误,它发现我在src/groovy源必须以特定的方式访问grails源,所以要保存封面我需要创建服务Grails中,在那里我中央社implemet保存方法,以及他们在的地方,我想打电话给我保存应该以这样的方式

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

得到服务而现在它的工作原理。

0

对我来说,它似乎节省了没有问题,除非你有一些约束错误... 你试图在保存/验证后打印错误?

println cover.errors 

你也可以尝试恢复从应用程序的所有实例,而不与

println Cover.list() 

在寻找蒙戈如果这最后一行,你可以看到你保存的情况下,也许Grails是数据库混合作为你有在databaseName = db,你后来说盖应该被保存到覆盖数据库

+0

Ou,我在配置db数据库中丢失了这方面的使用。是的,它真的可以是这样,我会检查,谢谢你的想法! – sphinks

+0

println Cover.list()输出只是[],这是什么意思? – sphinks

+0

这意味着它没有被保存,因为数据库中的封面列表是空的。您是否在保存或验证后尝试打印错误? – Eylen