1

我有两个域对象

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,那么查询是什么。

4

3 回答 3

3

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

def a = Attachment.get(4)
a.mailDrafts.clear()
a.save()
于 2012-09-18T13:42:11.957 回答
3

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

def attachment = Attachment.get(1)
def mailDraft = attachment.mailDrafts.find { it.id = 4 }
attachment.removeFromMailDrafts(mailDraft).save(flush: true)
于 2012-09-18T13:44:54.120 回答
0

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

于 2012-09-18T13:21:19.870 回答