如何从grails中的多对多关系的连接表中删除条目

时间:2012-09-18 09:27:51

标签: 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_drafts: id, mail_draft_id

现在,我想编写一个HQL查询to delete an entry from the table 'attachment_mail_drafts' where 'attachment_id' is 4,那么查询是什么。

3 个答案:

答案 0 :(得分:3)

你不能用HQL做到这一点,你可以阅读更多为什么here。 相反,你会做以下事情:

def a = Attachment.get(4)
a.mailDrafts.clear()
a.save()

答案 1 :(得分:3)

似乎在HQL中你只能删除对象,删除关联是不可能的。您可以使用原始SQL或使用GORM方法removeFrom:

def attachment = Attachment.get(1)
def mailDraft = attachment.mailDrafts.find { it.id = 4 }
attachment.removeFromMailDrafts(mailDraft).save(flush: true)

答案 2 :(得分:0)

你可以使用Burt Beckwith先生使用方法explained来实现m:n集合,避免使用hasMany / belongsTo技术,这样可以提高性能并帮助您安全地删除{attachment_mail_drafts'实体{{{ 3}}