簡體   English   中英

Grails + Mongodb =不持久化對象。 為什么?

[英]Grails+Mongodb = do not persist object. Why?

我在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連接到一個數據庫,而轉到另一個數據庫嗎?

對我來說,除非有一些約束錯誤,否則似乎可以毫無問題地進行保存...在保存/驗證后是否嘗試打印錯誤?

println cover.errors

您也可以嘗試從應用程序中恢復所有實例,而無需使用

println Cover.list()

如果在最后一行中可以看到已保存的實例,也許grails正在像在databaseName = db中一樣混合數據庫,然后您說應該將Cover保存到Cover數據庫

我發現了一個錯誤,對我來說,它發現src / groovy中的源必須以特定方式訪問grails源,因此要保存覆蓋范圍,我需要在grails中創建服務,我可以在其中實現實現保存方法,並將它們放在適當的位置我想打電話保存,我應該以這種方式獲得服務

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

現在就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM