代码之家  ›  专栏  ›  技术社区  ›  n92

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

  •  1
  • n92  · 技术社区  · 12 年前

    我有两个域对象

    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 回复  |  直到 12 年前
        1
  •  3
  •   Community Reversed Engineer    7 年前

    你不能用HQL做到这一点,你可以阅读更多为什么 here 。 相反,您可以执行以下操作:

    def a = Attachment.get(4)
    a.mailDrafts.clear()
    a.save()
    
        2
  •  3
  •   MBozic    12 年前

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

    def attachment = Attachment.get(1)
    def mailDraft = attachment.mailDrafts.find { it.id = 4 }
    attachment.removeFromMailDrafts(mailDraft).save(flush: true)
    
        3
  •  0
  •   Nickmancol    12 年前

    您可以使用以下方法来实现m:n集合,避免使用hasMany/belongsTo技术 explained Burt Beckwith先生,这提高了性能,可以帮助您安全地删除您的“attachment_mail_drafts”实体 need