2013-07-12 87 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应用程序的交互式控制台。 –