4

我有 2 类汽车和车库。他们有 am:n 关系,所以一辆车有很多车库,一个车库有很多车。

我的数据库中有一个garage_has_car 表,其中存储了关系。我已将汽车上的 set belongsTo 配置为 Garage

static belongsTo = [  Garage ]

如果我清除车库上的汽车集合并保存,garage_has_car 表中的相应条目将被删除。

但是如果我清除汽车上的车库集合并保存,garage_has_car 表中的相应条目不会被删除!

我怎样才能实现这种行为?

更新 1(添加关系定义):

在车库中,关系是:

cars column:'deskriptor_id',joinTable:'garage_has_cars'

在汽车中是

static belongsTo = [  Garage ]
garages column:'car_id',joinTable:'garage_has_cars'

我在 IRC 也问过这个问题,有人回答:

(...) grails 多对多关系总是只级联一个方向。grails中的多对多关系在hibernate中的映射方式也非常低效。不要使用它们。创建一个带有 1 个汽车和 1 个车库的加入类域对象 CarGarage。使您的类的汽车和车库属性瞬变,并向使用您的连接类来维护关系的汽车和车库类添加 get 和 add 方法。您还想在连接类中禁用版本控制,可以在此演示文稿http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf中找到一些信息,它的注释在这里: Grails:没有 hasMany/belongsTo 的多对多 - 而是使用本机 3NF - 搜索全文

我发布此报价是因为它可能会帮助遇到与我相同问题的人。一旦我有时间实施这些更改,我也会更新这个问题。

4

1 回答 1

2

只需回答即可从未回答列表中删除。

(...) grails 多对多关系总是只级联一个方向。grails中的多对多关系在hibernate中的映射方式也非常低效。不要使用它们。创建一个带有 1 个汽车和 1 个车库的加入类域对象 CarGarage。使您的类的汽车和车库属性瞬变,并向使用您的连接类来维护关系的汽车和车库类添加 get 和 add 方法。您还想在连接类中禁用版本控制,可以在此演示文稿 http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf中找到一些信息 ,它的注释在这里: Grails:没有 hasMany/belongsTo 的多对多 - 而是使用本机 3NF - 搜索全文

于 2013-04-01T16:25:10.627 回答