我有一个一对多的关系,我想在 Gorm 中映射支持集合是字符串到对象的映射(而不是默认集合)。grails doc here给出了这个例子:
class Book {
Map authors
static hasMany = [authors: Author]
}
def a = new Author(name:"Stephen King")
def book = new Book()
book.authors = [stephen:a]
book.save()
这非常接近我想要的,但并不安静。它的作用是将任意字符串“stephen”存储在与其他 Book 数据分开的连接表中,以及此关系的一些其他映射信息。当 Gorm 从数据库重新加载这个对象时,它只是简单地读取这个存储的值并将其用作映射中的键。
我想要的是更像 Hibernate 中的 @MapKey 的东西,您可以在其中指定值对象的属性以用作映射键。这样就没有额外的表,地图的值在保存时被持久化到数据库中(键在保存时几乎被忽略,因为它们是冗余信息),当从数据库加载集合时,该属性是从对象中读取并用作映射键。
当您的映射键基于存储在对象中的数据时,这似乎更清晰,因为您不必完成使映射键列与值对象保持同步的工作。在这种情况下,如果作者的名字从“stephen”更改为“steve”,您将不得不更新对象,并将其重新存储在不同的键下。
这在Gorm中可能吗?