grails:multiple belongsTo with back reference

时间:2014-10-29 16:05:04

标签: grails gorm

是否可以拥有属于具有反向引用的多个域类的域类?例如:

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是由PersonOrganization实施的界面。因此,调用bookInstance.owner将返回PersonOrganization个实例,BookOwner

我的解决方案运作良好,但感觉不对 - 这是一个肯定的迹象,表明我并不完全理解我在做什么。实现这个的最佳方法是什么?我是否应该完全放弃使用非常方便的后退参考?

谢谢

1 个答案:

答案 0 :(得分:0)

我想,您应该创建 Owner 超类。 Grails 将创建 Owner 表,其中字段 class 表示子类名称(在您的情况下:PersonOrganization)。