【问题标题】:How do you set up a database schema when one object is shared by two or more in Grails?在 Grails 中,当一个对象被两个或多个共享对象时,如何设置数据库模式?
【发布时间】:2014-12-13 01:58:35
【问题描述】:

如果您能帮助我解决问题或告诉我更好的解决方法,我将不胜感激。 所以基本上我有 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'和'delete',没用,我也试过了,

Class Business {

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

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

【问题讨论】:

    标签: grails model associations grails-orm shared


    【解决方案1】:

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

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

    您可以将embedAddress 加入PersonBusiness 类。但是,如果您需要将地址放在他们自己的表中,那将是行不通的。

    或者您可以将Address 子类化,例如:

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

    .. 和

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

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

    【讨论】:

    • 谢谢!我很感激!
    猜你喜欢
    • 2021-12-28
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多