2014-04-14 79 views
0

是否可以使用GORM映射以下内容?单向多对一映射级联

我想删除一个人时删除所有相关事件。

Person对象不应该有一个链接到事件。(我想避免对人域中使用hasMany

class Person { 
    String username 
} 

class Event { 
    String description 
    static belongsTo = [person:Person] 
} 

person.delete()时,因为事件是我现在得到一个“参照完整性约束违规”在删除人之前不删除。

回答

2

我不认为这是可能的,而无需使用hasMany

This SO Question状态(说到这,你为什么要避免呢?):

休眠仅瀑布沿定义的关联。如果A知道关于Bs的一切都不知道 ,那么对A做任何事都不会影响Bs。

使用static hasMany和bam,问题修复。

编辑:

我认为你可以做到这一点是在Person类使用beforeDelete删除所有相关Event解决的唯一途径,即

class Person { 
    def beforeDelete() { 
     def events = Event.findAllByPerson(this) 
     for (e in events) { 
      e.delete() 
     } 
    } 
} 

更多信息,请参见the documentation on Events and Auto Timestamping上那。

+0

谢谢对于这个建议!我将在我的应用程序中有很多必须与Person关联的域对象。我认为我可以避免在每次执行新关联时修改Person类中的hasMany修饰符。我并不需要双向性,但我发现它会为我节省很多麻烦。 – Kuba

+0

可以理解!第二种选择可能值得一试。不幸的是,'Person'类最终会了解'Event'类。 – grantmcconnaughey

+0

所以我想我会得到双向关联。现在我觉得不自然的是,我不能简单地做一个'新的事件(person:somePerson).save()''Person.get(somePerson.id).events'将是空的:(我是否总是要添加事件通过Person? – Kuba

0

以上将无法正常工作

为什么不定义一个没有参考映射:

class Person { 
    String username 
    static hasMany=[Events] 
} 

这样有事件的人没有实际的绑定,但一个人可以有许多事件