Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从grails中多对多关系的联接表中删除条目_Grails_Many To Many_Hql_Gorm_Grails 2.0 - Fatal编程技术网

如何从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)