当Grails中的两个或多个对象共享一个对象时,如何设置数据库模式?

时间:2014-12-13 01:58:35

标签: grails model associations gorm shared

如果您可以帮助我解决问题或者能够向我展示更好的方法,我将非常感激。 所以基本上我有3个模型,

Class Person {
         String firstName
         String lastName
         ...
         Address personalAdd
}

Class Business {
        String businessName
        String BusinessType
        ....
        Address BusinessAdd
}

现在这2个模型共享一个通用模型,

Class Address {
        String Street
        String zip
        ...
}

现在,当我保存业务或人员时,它仍然在单元测试中显示Address.list()。size()== 0。 当我明确地将对象保存为,

address.save(flush: true)
new Business(... ... ..., address: address).save(flush:true)

它工作正常, 但是当我删除它时,它也不会被删除。我尝试了级联' all-delete-orphan'并且'删除',没有工作,我也尝试过,

Class Business {

      ....
      def beforeDelete() {
           Address.withNewSession {
            Address.load(address.id).delete()
        }
      }
     .....
}

但仍然没有预期的输出! 我该怎么办?解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的属性未经任何hasManybelongsTo关系链接,因此可以独立处理。而且你无论如何都不能在地址上设置belongsTo(它有不同的父母)。那你有什么选择呢?

您可以将权限分开(就像现在一样)并手动处理关系(GORM events可以帮助您)。

AddressPerson类可以embed Business。如果您需要将地址放在他们自己的表中,那就无法工作。

或者您可以继承Address,例如:

class BusinessAddress extends Address {
    static belongsTo = [ business: Business ]
}

..和

class PersonAddress extends Address {
    static belongsTo = [ person: Person ]
}

这样,您只有一个包含数据库地址的表。