【问题标题】:grails delete not persistentgrails删除不是持久的
【发布时间】:2013-07-12 07:16:50
【问题描述】:

我试图从我的数据库中删除一个更复杂的相关对象,所以我使用 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 ]
}

【问题讨论】:

  • 显示您的域 TextCode、TextContent 和 BundleVersion 的代码

标签: grails grails-orm


【解决方案1】:

您是否尝试过 flush:true 指示 GORM 将更改持久化回数据库。就像这个 ..

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

flush:true 是你需要的全部技巧,或者你应该修改 datasource.groovy 的配置部分

dbCreate 

然后说出来

dbUpdate 

【讨论】:

  • 是的,它冲洗它没有任何问题。使用控制台时,它可以正常工作并保持良好。它在应用程序中“工作”,除了删除不持久..
  • @NielsBechNielsen 我不明白它在控制台中的作用,或者你的意思是(GroovyConsole)?
  • 运行 'grails console' 并获得预加载 grails 应用程序的交互式控制台..
【解决方案2】:

不知道为什么上述方法不起作用,但我设法通过直接 HQL 来解决它。

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

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2016-10-22
    • 2023-04-08
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多