如何从grails中多对多关系的联接表中删除条目
我有两个域对象如何从grails中多对多关系的联接表中删除条目,grails,many-to-many,hql,gorm,grails-2.0,Grails,Many To Many,Hql,Gorm,Grails 2.0,我有两个域对象 Class Attachment{ static hasMany = [mailDrafts: MailDraft]; } Class MailDraft{ static hasMany = [attachments: Attachment] static belongsTo = Attachment } 它创建了三个表 1)attachment 2)mail_draft 3)attachment_mail_drafts attachment_mail
Class Attachment{
static hasMany = [mailDrafts: MailDraft];
}
Class MailDraft{
static hasMany = [attachments: Attachment]
static belongsTo = Attachment
}
它创建了三个表
1)attachment
2)mail_draft
3)attachment_mail_drafts
attachment_mail_drafts: id, mail_draft_id
现在,我想写一个HQL查询
,从“attachment\u mail\u drafts”表中删除一个条目,其中“attachment\u id”是4
,那么查询是什么呢。您可以使用Burt Beckwith先生的方法实现m:n集合,避免hasMany/belongsTo技术,这提高了性能,可以帮助您安全地删除您需要的“附件邮件草稿”实体。您可以使用Burt Beckwith先生的方法实现m:n集合,避免hasMany/belongsTo技术,这提高了性能,并可以帮助您安全地删除您需要的“附件邮件草稿”实体。如果HQL无法做到这一点,您可以阅读更多原因。
相反,您将执行以下操作:
def a = Attachment.get(4)
a.mailDrafts.clear()
a.save()
你不能用HQL做这件事,你可以阅读更多的原因。 相反,您将执行以下操作:
def a = Attachment.get(4)
a.mailDrafts.clear()
a.save()
在HQL中,似乎只能删除对象,删除关联是不可能的。您可以使用原始SQL或使用GORM方法removeFrom:
def attachment = Attachment.get(1)
def mailDraft = attachment.mailDrafts.find { it.id = 4 }
attachment.removeFromMailDrafts(mailDraft).save(flush: true)
在HQL中,似乎只能删除对象,删除关联是不可能的。您可以使用原始SQL或使用GORM方法removeFrom:
def attachment = Attachment.get(1)
def mailDraft = attachment.mailDrafts.find { it.id = 4 }
attachment.removeFromMailDrafts(mailDraft).save(flush: true)