我正在做一个 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)。
提前感谢您的任何建议。