Grails 圣杯只有一个单向的
目前我遇到了一些麻烦,在Grails中创建单向关系 我有一个带有属性地址的类。 这个地址是一个单独的类。 从理论上讲,如果地址所关联的马桶对象被删除,该地址可能仍然存在。 如果地址被删除,厕所也将保留 GORM的hasOne不是我需要的,因为它创建了一种双向关系 定义类型类的属性只会导致非持久化地址(尽管它有自己的表)——这意味着地址与厕所对象的关联不存在 我不太熟悉这种关系,所以我非常希望能找到一个解决方案或其他方式来实现我的目标Grails 圣杯只有一个单向的,grails,gorm,relationship,Grails,Gorm,Relationship,目前我遇到了一些麻烦,在Grails中创建单向关系 我有一个带有属性地址的类。 这个地址是一个单独的类。 从理论上讲,如果地址所关联的马桶对象被删除,该地址可能仍然存在。 如果地址被删除,厕所也将保留 GORM的hasOne不是我需要的,因为它创建了一种双向关系 定义类型类的属性只会导致非持久化地址(尽管它有自己的表)——这意味着地址与厕所对象的关联不存在 我不太熟悉这种关系,所以我非常希望能找到一个解决方案或其他方式来实现我的目标 希望我的问题是清楚的-如果没有评论,我将尝试添加进一步的解释如
希望我的问题是清楚的-如果没有评论,我将尝试添加进一步的解释如果厕所上的地址是一个简单的关联,没有一个
hasOne
或属于映射
,那么就不会级联任何操作
这意味着您必须保存地址,分配给它厕所。地址
,然后保存厕所。取自
5.3.3了解级联更新和删除
了解级联更新和删除在使用GORM时的工作方式至关重要。要记住的关键部分是belongsTo设置,它控制哪个类“拥有”关系。
无论是一对一、一对多还是多对多(如果您定义了belongsTo),更新和删除都将从所属类级联到其所有物(关系的另一端)
如果不定义belongsTo,则不会发生级联,您必须手动保存每个对象
因此……如果不使用belongs,则如果手动保存每个对象,则不会出现问题。找到了解决方案
我遗漏的是厕所类中接口的实现
问题是(作为提醒)厕所类中地址的关系没有保存到数据库中
这是接口本身的问题——在这个接口中,定义了getter和setter,并且必须实现它们(显然是接口的工作方式)。这里的问题是,Address属性的setter需要类型IAddress
我重载setter以接收类型为Address
的参数
通过此更改,马桶
和地址
之间的关系将正确保存到数据库中-地址的ID将保存在马桶的表中
我认为setter的定义只是一个错误(我对接口没有影响),但是有了这个解决方法,我无论如何都可以让它工作
希望这个解释对其他人也有帮助。为什么不建立一个关联模型的类呢
class ToiletAddress {
Toilet toilet
Address address
...
}
。。。然后简单地将您的逻辑包装到一个服务中,在该服务中,您为厕所分配地址,并删除厕所或地址
使用约束可以定义它是什么类型的关联。例1-1、1-n(两侧)和n-m
如果地址被删除了怎么办?厕所会保留还是删除?它会保留。这是一种松散的关系(我不知道这是否能解释当时的情况)。谢谢你的建议,但这并没有起作用——这种关系只是没有出现在数据库中。这是一个学生项目,因此我们能够更改要求。
static constraints = {
address unique: ['toilet']
toilet validator: {val, obj -> ... }
}