我有一个Note域类,当一个新的笔记被保存时,我需要为它创建一个NoteEvent,记录该笔记已创建的后代。Note有一个 的集合NoteEvents,每个NoteEvent都跟踪Note它属于哪个。
Note班级:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
}
NoteEvent班级:
class NoteEvent {
Date dateCreated
String type
static belongsTo = [note : Note]
}
为了NoteEvents在创建便笺时处理新的保存,我使用afterInsert,因为我在各处保存便笺实例(在每次保存新便笺后使用特定的事件创建代码将是重复且耗时的),并且beforeInsert显然没有处理Noteyet 的持久实例 - 没有任何东西NoteEvent可以作为它的note.
所以现在我的Note课是:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
def afterInsert = {
def event = new NoteEvent(type: "CREATED")
addToEvents(event)
save()
}
}
但是我还需要NoteEvent在其中一个笔记更新时创建一个,这就是混乱和沮丧以及严重缺乏咖啡的地方。要在更新NoteEvent时将新的“更新”附加到笔记上,我非常聪明地决定再次使用afterUpdate, 以避免在我需要更新Note实例时将事件创建代码洒在整个应用程序中。
所以现在,对于Note,我有:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
def afterInsert = {
def event = new NoteEvent(type: "CREATED")
addToEvents(event)
save()
}
def afterUpdate = {
def event = new NoteEvent(type: "UPDATED")
addToEvents(event)
save()
}
}
要将新事件添加到笔记的集合中,我使用的是动态addTo()方法,然后需要一个save()实例。但在“之后”事件的情况下,这是对save(). 因此,当我第一次保存一个新实例并afterInsert调用它时,刚刚保存的实例会立即再次保存,这会导致afterUpdate事件被触发,现在我有两个笔记事件:我刚刚保存时的“创建”一个笔记,以及“更新”的笔记,当“创建”笔记导致笔记再次被保存时。
我不清楚使用“之前”事件如何在这种情况下有所帮助。我还能怎么做?