Grails、GORM、MongoDB:忽略鉴别器列值

Grails、GORM、MongoDB:忽略鉴别器列值,mongodb,grails,groovy,gorm,discriminator,Mongodb,Grails,Groovy,Gorm,Discriminator,我正在从事一个Grails项目,我想使用GORM来读/写MongoDB中的文档。我想实现一个特定的场景,我已经尝试了2-3天,但我不知道我做错了什么。我已经阅读了Grails文档,在web上发表了许多相关文章,但仍然一无所获 为了简单起见,我正在研究一个足够简单的场景,如下所示: 我有4个域类: 有人,很棒 动物性 狗狗 超级棒 现在,在一个名为CrudService的服务类中,我有一个方法,例如foo,在该方法中我创建了一个新的Someone对象,并将其保存到我的Mongo数据库中 Someo

我正在从事一个Grails项目,我想使用GORM来读/写MongoDB中的文档。我想实现一个特定的场景,我已经尝试了2-3天,但我不知道我做错了什么。我已经阅读了Grails文档,在web上发表了许多相关文章,但仍然一无所获

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

我有4个域类:

有人,很棒

动物性

狗狗

超级棒

现在,在一个名为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


提前感谢您的建议。

我感觉鉴别器可能不是加法的,所以您的子类正在替换您的列definition@tim,谢谢你的评论。你知道我能做点什么吗?问题是,通过查看文档,我得到的印象是,我所做的应该是有效的。嗨@kostasg,你找到解决方案了吗?嗨@ilPittiz,老实说,我甚至不记得我们当时是如何解决的:
class Dog extends Animal {

    static mapWith = 'mongo'

    String dogName

    static mapping = {
        discriminator value: "dog"
    }

    static belongsTo = Someone

    static constraints = {}
}
class Cat extends Animal {

    static mapWith = 'mongo'

    String catName

    static mapping = {
        discriminator value: "cat"
    }

    static belongsTo = Someone

    static constraints = {}
}
Someone someone = new Someone(name: "A name", animal: new Dog(dogName: "Azor"))
someone.save(flush: true)
{ 
    "_id" : NumberLong(21), 
    "animal" : { 
        "_class" : "Dog", 
        "dogName" : "Azor" 
    }, 
    "name" : "A name", 
    "version" : 0 
}