使用GORM MongoDB保持动态groovy属性

时间:2012-11-18 21:58:10

标签: mongodb grails dynamic properties groovy

我目前正在尝试使用GORM MongoDB插件为grails保留以下类:

class Result {

    String url

    def Result(){

    }


    static constraints = {
    }

    static mapWith="mongo"

    static mapping = {
        collection "results"
        database "crawl"
    }
}

我正在运行以保持此类的代码如下:

class ResultIntegrationTests {

    @Before
    void setUp() {

    }

    @After
    void tearDown() {

    }

    @Test
    void testSomething() {
        Result r = new Result();

        r.setUrl("http://heise.de")

        r.getMetaClass().setProperty("title", "This is how it ends!")

        println(r.getTitle())

        r.save(flush:true)
    }
}

这是MongoDB中的结果:

{ "_id" : NumberLong(1), "url" : "http://heise.de", "version" : 0 }#

现在,使用MongoDB正确保留了url,但是映射器看不到动态属性 - 尽管println(r.getTitle())工作正常。

我是groovy的新手所以我认为有更多经验的人可以帮我解决这个问题。有没有办法让这个动态添加的属性对映射工具可见?如果是,我该怎么做?

非常感谢任何建议......

2 个答案:

答案 0 :(得分:2)

不是将随机属性添加到metaClass并希望Grails将扫描metaClass以查找随机属性然后保留它们,为什么不将Map添加到您的域类(或新的Key / Value域类)哪个结果可以hasMany),因此您可以根据需要为其添加随机额外属性。

答案 1 :(得分:1)

试试这个doc

@Test
void testSomething() {
    Result r = new Result();

    r.url = "http://heise.de"

    r.['title'] = "This is how it ends!"  //edit: forgot the subscript 

    println r.['title']

    r.save(flush:true)
}

BTW,您可以直接使用java api / gmongo,而不是使用gorm或hibernate。