2013-07-12 2 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, поэтому я поместил его в службу базы данных и запустил приложение. Приложение запускает метод успешно (проверено), но когда он перечитывает коллекцию, он снова появляется. Большая тайна ...!?

Кто-нибудь видел что-нибудь подобное? Или я просто смущающе наивна?

EDIT

Для уточнения:

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. –

Смежные вопросы