我的grails应用程序中有域类,如下所示。我想做删除操作,这是我第一次在关联对象上执行删除操作 解释如下。
Attachment
----------
Class Attachment{
static hasMany = [mailDrafts: MailDraft];
}
MailDraft
---------------
Class MailDraft{
static hasMany = [attachments: Attachment]
static belongsTo = Attachment
Training training
Boolean isSent
String type
}
Training
--------------
Class Training{
static hasMany = [attachments: Attachment]
MailDraft infoDraft
MailDraft reminderDraft
}
Trainer
------------
Class Trainer{
MailDraft introMailDraft
}
我正在运行一个批处理进程,删除所有带有标记' isSent = true'的邮件队列。以及该草案的附件
Case1:
infoDraft (MailDraft object)
-----------------------------
training: A training
attachments: [file1, file2]
isSent: true
type: 'info'
training: A training (Training object)
-------------------------------------
attachments: [file1]
在上面的例子中,该过程应该删除' infoDraft'对象和' file2'附件但不是附件' file1',因为培训' A培训'已经得到了' file1'附件
Case2:
introMailDraft (MailDraft object)
-----------------------------
training: null
attachments: [file3]
isSent: true
type: 'intro'
在上面的例子中,该过程应该删除' introMailDraft'以及附件' file3'但在这种情况下,培训为空
在上述所有情况下,应更新关联表
怎么做?
答案 0 :(得分:2)
因为您根据关联类的属性进行了条件删除,所以最好通过挂钩GORM事件并在那里实现逻辑来实现。例如:
class MailDraft {
static hasMany = [attachments: Attachment]
static belongsTo = Attachment
Training training
Boolean isSent
String type
def beforeDelete() {
MailDraft.withNewSession {
// examine state of this instance
// and delete any related instances that meet my business logic requirements.
}
}
}
您可以在Grails文档的Advanced GORM部分找到更多信息。