Grails groovy удаляет старые записи

В следующем коде, как я могу удалить все записи старых магазинов, связанные с автором, и вставить новый

Класс домена

 class Store {
Date dateCreated
Date lastUpdated

static belongsTo = [author: Author]
    static constraints = {
     }
  }

контроллер домена

 def update() {
    if (!requestIsJson()) {
        respondNotAcceptable()
        return
    }

    def bookInstance = book.get(params.id)
    if (!bookInstance) {
        respondNotFound params.id
        return
    }

    if (params.version != null) {
        if (bookInstance.version > params.long('version')) {
            respondConflict(bookInstance)
            return
        }
    }

    def stores = bookInstance.stores

    //bookInstance.delete(flush:true);
    //stores.delete(flush:true);



    bookInstance.properties = request.GSON

    if (bookInstance.save(flush: true)) {
        respondUpdated bookInstance

    } else {
        respondUnprocessableEntity bookInstance
    }
}

person Rajeev    schedule 10.10.2013    source источник
comment
Не могли бы вы добавить исходный код класса Author? Без этого не могу дать решение.   -  person rxn1d    schedule 10.10.2013


Ответы (1)


Я предполагаю, что вы получили экземпляр Author, который хотите изменить. В этом случае вы можете просто просмотреть магазины, связанные с автором, и удалить их один за другим. Хотите ли вы очищать после каждого удаления или ждать, пока все не будут удалены, зависит от вас.

Предположим, у вас есть класс Author, который выглядит примерно так:

class Author {
    static hasMany = [stores: Store]
}

Затем вы можете добавить методы в свой контроллер:

class MyController {
    SessionFactory sessionFactory

    def deleteStoresFromAuthor(Author author) {
        author.stores.each { it.delete(flush: true) }
    }

    def deleteStoresFromAuthorWithDelayedFlush(Author author) {
        author.stores.each { it.delete() }
        sessionFactory.currentSession.flush()
    }

    def createStoreForAuthor(Author author) {
        new Store(author: author, dateCreated: new Date(), lastUpdated: new Date()).
                save(flush: true)
    }
}

Другой альтернативой является добавление этих методов в классы предметной области, что может быть предпочтительнее, особенно если они нужны вам более чем в одном месте вашего приложения.

person Steinar    schedule 10.10.2013