2

我目前正在尝试使用 Grails 的 GORM MongoDB 插件来保留以下类:

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 }#

现在 url 正确地保存在 MongoDB 中,但是映射器看不到动态属性——尽管 println(r.getTitle()) 工作得很好。

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

非常感谢任何建议...

4

2 回答 2

2

与其将随机属性添加到元类并希望 Grails 会扫描元类以查找您的随机属性然后将它们持久化,不如将 Map 添加到您的域类(或 Result 可以的新键/值域类)hasMany) 所以你可以根据需要添加随机的额外属性。

于 2012-11-19T09:39:23.480 回答
1

试试这个文档

@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)
}

顺便说一句,您总是可以直接使用 java api / gmongo而不是使用 gorm 或 hibernate 。

于 2012-11-19T03:25:29.840 回答