1

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

2 回答 2

1

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

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

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

dbCreate 

像这样说

dbUpdate 
于 2013-07-12T07:36:48.193 回答
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])
于 2013-07-15T11:27:39.550 回答