0

我正在做一个 Grails 项目,我想使用 GORM 来读取/写入 MongoDB 中的文档。我有一个我想要实现的特定场景,我已经尝试了 2-3 天来完成这项工作,但我无法找出我做错了什么。我已经阅读了 Grails 文档和网络上的许多相关帖子,但仍然一无所获。

为了简单起见,我正在研究一个足够简单的场景,如下所示:

我有 4 个域类:

某人.groovy

class Someone {

    static mapWith = 'mongo'

    static embedded = ['animal']

    static constraints = {}

    String name

    Animal animal
}

动物.groovy

class Animal {

    static mapWith = 'mongo'

    static mapping = {
        discriminator column: "type"
    }

    static belongsTo = Someone

    static constraints = {}
}

Dog.groovy

class Dog extends Animal {

    static mapWith = 'mongo'

    String dogName

    static mapping = {
        discriminator value: "dog"
    }

    static belongsTo = Someone

    static constraints = {}
}

Cat.groovy

class Cat extends Animal {

    static mapWith = 'mongo'

    String catName

    static mapping = {
        discriminator value: "cat"
    }

    static belongsTo = Someone

    static constraints = {}
}

现在,在一个名为 的服务类中CrudService,我有一个方法,例如foo(),在该方法中我创建了一个新Someone对象,并将其保存到我的 Mongo 数据库中。

Someone someone = new Someone(name: "A name", animal: new Dog(dogName: "Azor"))
someone.save(flush: true)

当我检查我的 mongoDB 集合以查看保存的内容时,我看到:

{ 
    "_id" : NumberLong(21), 
    "animal" : { 
        "_class" : "Dog", 
        "dogName" : "Azor" 
    }, 
    "name" : "A name", 
    "version" : 0 
}

因此,如您所见,文档已保存,但鉴别器列名(和值)被完全忽略。该文档以"_class"列名(这是默认的鉴别器列名)的值和类名(在本例中为Dog)作为其值保存。

谁能帮助我并告诉我我在这里做错了什么?

GORM 的鉴别器功能是否有可能适用于 RDBMS 但不适用于 NoSQL 数据库?

(目前我也在研究 Morphia,看看它是否可以为我的问题提供解决方案,但我更喜欢使用 GORM,因为它是 Grails 的默认 ORM)。

提前感谢您的任何建议。

4

0 回答 0