我有一个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
显然没有处理Note
yet 的持久实例 - 没有任何东西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
事件被触发,现在我有两个笔记事件:我刚刚保存时的“创建”一个笔记,以及“更新”的笔记,当“创建”笔记导致笔记再次被保存时。
我不清楚使用“之前”事件如何在这种情况下有所帮助。我还能怎么做?