這可能是一個新手的錯誤,所以請原諒我提前。我已搜查高和低的解決方案,但是沒有結果 - 所以我thourght我想在這裏補充我的第一篇:-)問題與Grails中刪除對象 - 慢,還沒有真正刪除
我有兩個領域類,一個叫域和一個叫做頁。如下面的代碼所示,該域有許多頁面。
class Domain {
...
static hasMany = [ pages : Page, ... ]
static mapping = {
pages lazy:true
}
}
class Page {
String identifier
...
static belongsTo = [ domain : Domain ]
static hasMany = [ ... ]
static constraints = {
identifier(blank:false, unique:'domain')
}
static mapping = {
...
domain lazy:true
}
}
我的應用程序有一個很長的算法,其中包括創建頁面的域。如果您用相同的參數以前運行的算法,它將被刪除再次運行算法之前,由以前的運行創建的所有頁面開始。
我有兩個問題:
問題#1 當我刪除一個域中的特定頁面使用:
def domain = page.domain
domain.removeFromPages(page);
page.delete()
domain.save(flush:true)
這使得Hibernate來獲取並加載域,最終的所有頁面激發數千個查詢(該域有許多頁面)。我如何提高性能? - 直接執行sql刪除頁面使數據庫和休眠狀態不同步。
問題#2 當我後來又創建的頁面:
def page = new Page(identifier:'...').save(failOnError:true)
我得到:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
歡迎任何幫助 - 我在這裏失去了我的腦海: -/
嗨,THX了很多響應。但是其他答案指出,性能部分不是批量刪除的問題,而是更多的關係問題。但戰爭尚未結束。即使我正在使用page.delete(flush:true)刪除頁面,並且在無法獲取已刪除頁面後的行中 - 它仍然存在。因爲當我以後想要再次創建頁面時,我得到了「org.springframework.orm.hibernate3.HibernateSystemException:具有相同標識符值的另一個對象已經與會話相關聯」 – Krauw