{"id":1766,"date":"2010-09-29T12:00:07","date_gmt":"2010-09-29T06:30:07","guid":{"rendered":"https:\/\/tothenewco.pro\/blog\/?p=1766"},"modified":"2016-12-19T15:04:07","modified_gmt":"2016-12-19T09:34:07","slug":"gorm-batch-deletes-made-easy-with-load-method","status":"publish","type":"post","link":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/","title":{"rendered":"GORM Batch Deletes Made Easy with Load Method"},"content":{"rendered":"<p>We are using the <a href=\"http:\/\/www.grails.org\/plugin\/asynchronous-mail\" target=\"_blank\">grails asynchronous mail plugin<\/a> in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for disaster because our DB was growing exponentially. To take care of this, we decided to do a DB cleanup and delete the messages that had the status SENT.<\/p>\n<p>Going through the documents for Deleting Objects, we noticed that grails doesn&#8217;t really support batch deletes. The executeUpdate() method, which was provided there as a workaround, was also not a suitable solution because we would&#8217;ve had to delete the associations explicitly. This is because executeUpdate() wasn&#8217;t doing anything with the associations, which in our case where the attachments.<\/p>\n<p>We found a suitable solution after going through <a href=\"https:\/\/tothenewco.pro\/blog\/grails-load-proxy-domain-objects\/\" target=\"_blank\">Amit&#8217;s blog about loading proxy objects<\/a>. What we did was something like this.<\/p>\n<p>[java]<br \/>\ndef sentMails = Mail.findAllByStatus(&amp;quot;SENT&amp;quot;)<br \/>\nsentMails*.discard() \/\/detach all the objects from session<br \/>\nsentMails.each{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Mail proxySentMailObject = Mail.load(it.id) \/\/load proxy object<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxySentMailObject.delete() \/\/using the proxy object to delete from DB<br \/>\n}<br \/>\n[\/java]<br \/>\nThis also ensures that we don&#8217;t face the ConcurrentModificationException we would have faced if we tried deleting directly using<br \/>\n[java]<br \/>\nsentMails.each{<br \/>\n       it.delete()<br \/>\n}<br \/>\n[\/java]<\/p>\n<p>Special Thanks to <a href=\"https:\/\/tothenewco.pro\/blog\/author\/amit\/\" target=\"_blank\">Amit<\/a> for the wonderful post which was of great help!<\/p>\n<p>Hope this helps<br \/>\nVivek<br \/>\nvivek[at]intelligrape.com<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":19,"footnotes":""},"categories":[7],"tags":[419,29,4840,420],"class_list":["post-1766","post","type-post","status-publish","format-standard","hentry","category-grails","tag-batch-delete","tag-gorm","tag-grails","tag-hibernate-proxy-objects"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Vivek Krishna\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#article\",\"name\":\"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog\",\"headline\":\"GORM Batch Deletes Made Easy with Load Method\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2010-09-29T12:00:07+05:30\",\"dateModified\":\"2016-12-19T15:04:07+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":4,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#webpage\"},\"articleSection\":\"Grails, batch delete, GORM, Grails, hibernate proxy objects\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#listItem\",\"name\":\"GORM Batch Deletes Made Easy with Load Method\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#listItem\",\"position\":3,\"name\":\"GORM Batch Deletes Made Easy with Load Method\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/\",\"name\":\"Vivek Krishna\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07dba643a97b00215bacf46343f18d6cb7ab45f777264e13c22deb54f2cc830b?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Vivek Krishna\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/\",\"name\":\"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog\",\"description\":\"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gorm-batch-deletes-made-easy-with-load-method\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"datePublished\":\"2010-09-29T12:00:07+05:30\",\"dateModified\":\"2016-12-19T15:04:07+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog","description":"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for","canonical_url":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#article","name":"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog","headline":"GORM Batch Deletes Made Easy with Load Method","author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/vivek\/#author"},"publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"},"datePublished":"2010-09-29T12:00:07+05:30","dateModified":"2016-12-19T15:04:07+05:30","inLanguage":"en-US","commentCount":4,"mainEntityOfPage":{"@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#webpage"},"isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#webpage"},"articleSection":"Grails, batch delete, GORM, Grails, hibernate proxy objects"},{"@type":"BreadcrumbList","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/tothenewco.pro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/tothenewco.pro\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#listItem","name":"GORM Batch Deletes Made Easy with Load Method"},"previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#listItem","position":3,"name":"GORM Batch Deletes Made Easy with Load Method","previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/tothenewco.pro\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/tothenewco.pro\/blog\/"},{"@type":"Person","@id":"https:\/\/tothenewco.pro\/blog\/author\/vivek\/#author","url":"https:\/\/tothenewco.pro\/blog\/author\/vivek\/","name":"Vivek Krishna","image":{"@type":"ImageObject","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/07dba643a97b00215bacf46343f18d6cb7ab45f777264e13c22deb54f2cc830b?s=96&d=mm&r=g","width":96,"height":96,"caption":"Vivek Krishna"}},{"@type":"WebPage","@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#webpage","url":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/","name":"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog","description":"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/#breadcrumblist"},"author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/vivek\/#author"},"creator":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/vivek\/#author"},"datePublished":"2010-09-29T12:00:07+05:30","dateModified":"2016-12-19T15:04:07+05:30"},{"@type":"WebSite","@id":"https:\/\/tothenewco.pro\/blog\/#website","url":"https:\/\/tothenewco.pro\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog","og:description":"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for","og:url":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/","og:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"GORM Batch Deletes Made Easy with Load Method | TO THE NEW Blog","twitter:description":"We are using the grails asynchronous mail plugin in our project and noticed that the sent mails never gets deleted from the database. This was an issue because we were sending out a lot of mails and all of them had PDF attachments of about 500 KB to 1 MB each. A sure recipe for","twitter:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"1766","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-29 22:43:35","updated":"2024-02-29 09:33:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGORM Batch Deletes Made Easy with Load Method\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/tothenewco.pro\/blog"},{"label":"Grails","link":"https:\/\/tothenewco.pro\/blog\/category\/grails\/"},{"label":"GORM Batch Deletes Made Easy with Load Method","link":"https:\/\/tothenewco.pro\/blog\/gorm-batch-deletes-made-easy-with-load-method\/"}],"_links":{"self":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/1766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/comments?post=1766"}],"version-history":[{"count":0,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/1766\/revisions"}],"wp:attachment":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/media?parent=1766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/categories?post=1766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/tags?post=1766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}