2013-07-12 86 views
1

我試圖從我的數據庫中刪除一個更復雜的相關對象,於是我研究了使用Grails控制檯以及與此想出了:Grails的刪除並不持久

  TextContent textContent = ...The item to delete... 

      // TextContent hasMany BundleText 
      // BundleText belongsTo BundleVersion 
      textContent.bundleTexts.each { 
       BundleVersion bundleVersion = it.bundleVersion 
       bundleVersion.removeFromBundleTexts(it) 
       textContent.removeFromBundleTexts(it) 
       it.delete() 
       //bundleVersion.save() 
      } 
      // Language hasMany TextContent 
      // Language belongsTo textContent (?) 
      textContent.language.removeFromTextContents(textContent) 

      // TextContent belongsTo textCode 
      TextCode textCode = textContent.textCode 
      textCode.removeFromTextContents(textContent) 

      textContent.delete() 
      //textCode.save() 

現在,這一切工作正常在Grails的控制檯,所以我把它放在我的數據庫服務中,然後運行應用程序。 該應用程序運行該方法成功(驗證),但是當它重新讀取集合它再次出現.. 大神祕......!?

任何人都看過類似的東西嗎?還是我只是尷尬地天真?

編輯

對於澄清:

class TextCode { 
    static hasMany = [ textContents : TextContent ] 
} 

class TextContent { 
    Language language 
    static belongsTo = [ textCode : TextCode ] 
    static hasMany = [ bundleTexts : BundleText] 
} 

class BundleText { 
    TextContent textContent 
    static belongsTo = [ bundleVersion : BundleVersion ] 
} 

class Language { 
    static hasMany = [ textContents : TextContent ] 
} 
+0

顯示您的域的代碼TextCode,TextContent和BundleVersion –

回答

0

不知道爲什麼上面沒有工作,但我設法通過直接HQL來解決它,而不是。

BundleText.executeUpdate("delete BundleText bt where bt.textContent=:content", [content: textContent]) 
TextContent.executeUpdate("delete TextContent tc where tc.id = :id", [id: textContent.id]) 
1

你試圖刷新:真的,指示GORM堅持更改回database.like這一個..

def book = Book.get(1) 
book.delete(flush: true) 

flush:true是你需要的所有技巧,或者你應該修改datasource.groovy的配置文件

dbCreate 

,並說它是

dbUpdate 
+1

是的,它刷新沒有任何問題。它在使用控制檯時工作並保持良好狀態。它「在工作」的應用程序,除了刪除沒有持久...... –

+0

@NielsBechNielsen我沒有得到你的主意,它在控制檯或你的意思(GroovyConsole)? – danielad

+0

運行'grails console',您將獲得預裝grails應用程序的交互式控制檯。 –