2012-09-18 85 views
1

的連接表中的條目,我有兩個域對象如何刪除從多到許多關係的Grails

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 

現在,我wnat到寫一個HQL查詢to delete an entry from the table 'attachment_mail_drafts' where 'attachment_id' is 4,那麼查詢是什麼。

回答

3

你不能用HQL做到這一點,你可以閱讀更多爲什麼here。 相反,你會做到以下幾點:

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

你可以實現M:N先生伯特·貝克威思集合避免的hasMany /屬於關聯技術使用方法explained,這提高了性能,可以幫助您安全地刪除「attachment_mail_drafts」實體,你need

3

看來,在HQL你只能刪除對象,除去協會是不可能的。您可以使用原始SQL或使用GORM方法removeFrom:

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