我有 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 - 搜索全文
我发布此报价是因为它可能会帮助遇到与我相同问题的人。一旦我有时间实施这些更改,我也会更新这个问题。