gpt4 book ai didi

grails - 在Grails中一个对象被两个或多个共享时,如何设置数据库模式?

转载 作者:行者123 更新时间:2023-12-02 14:42:27 24 4
gpt4 key购买 nike

如果您能帮助我解决问题或为我提供更好的解决方法,我将不胜感激。
所以基本上我有3个模型

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

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

现在,这两个模型共享一个通用模型,
Class Address {
String Street
String zip
...
}

现在,当我保存企业或个人时,它仍然在单元测试中显示Address.list()。size()== 0。
当我明确将对象另存为时,
address.save(flush: true)
new Business(... ... ..., address: address).save(flush:true)

它工作正常,
但是当我删除它时,它也不会被删除。我尝试了级联“全部删除孤立”和“删除”,但是没有用,我也尝试过,
Class Business {

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

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

最佳答案

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

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

您可以将Address变成PersonBusiness类。如果您需要将地址放在自己的表中,则将无法使用。

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

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

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

这样,您在数据库中将只有一个带有地址的表。

关于grails - 在Grails中一个对象被两个或多个共享时,如何设置数据库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com