是否可以拥有属于具有反向引用的多个域类的域类?例如:
class Person {
List<Book> books
static hasMany = [books: Book]
}
class Organization {
List<Books> books
static hasMany = [books: Book]
}
class Book {
def owner // what's the type?
static belongsTo = [Person, Books]
}
一本书可以属于一个人或一个组织,但不能同时属于两者。 人员和组织具有单独的序列ID。
我想出的解决方案是:
class Book {
Long ownerID
String ownerClass
static belongsTo = [Person, Books]
static transients = ['owner']
static constraints = {
ownerId(nullable:false, blank:false)
ownerClass(nullable:false, blank:false)
}
public BookOwner getOwner() {
grailsApplication.getArtefact("Domain", ownerClass)?.getClazz()?.get(ownerId)
}
}
其中BookOwner
是由Person
和Organization
实施的界面。因此,调用bookInstance.owner
将返回Person
或Organization
个实例,BookOwner
。
我的解决方案运作良好,但感觉不对 - 这是一个肯定的迹象,表明我并不完全理解我在做什么。实现这个的最佳方法是什么?我是否应该完全放弃使用非常方便的后退参考?
谢谢
答案 0 :(得分:0)
我想,您应该创建 Owner
超类。 Grails 将创建 Owner
表,其中字段 class
表示子类名称(在您的情况下:Person
、Organization
)。