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