Grails GORM的问题

时间:2011-06-16 15:30:05

标签: grails gorm

我正在开发一个应用程序,它从XML文件中查询数据并使用该数据创建多个对象。

class Search {String artist}

class Performance {static belongsTo = [events:Event, artists:Artist]}

class Location {static belongsTo = [events:Event]}

class Event {static hasMany = [performances:Performance]}

class Artist {static hasMany = [performances:Performance]}

这是域类(为简单起见,仅显示关系)。 然后,当用户在SearchController中插入新的艺术家时,我想创建此对象的实例。我尝试使用以下代码在SearchController中保存闭包,但它似乎无法正常工作。 resultList是一个Map,其中包含从XML文件中查询的值。

def save = {
    def searchInstance = new Search(params)
    def resultsList = searchService.lastFmVenues(params.artist)

    resultsList.each{
        def performanceInstance = new Performance()
        def locationInstance = new Location(venue:it.venue, street:it.street, city:it.city, postcode:it.postalcode, country:it.country, lat:it.lat, lng:it.lng)
        def artistInstance = new Artist(name:params.artist).addToPerformances(performanceInstance)
        def eventInstance = new Event(eventId:it.eventID, title:it.eventTitle, date:it.date, location:locationInstance)

        if (searchInstance.save(flush:true) && eventInstance.save(flush: true) && artistInstance.save(flush: true) && locationInstance.save(flush: true) && performanceInstance.save(flush:true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'search.label', default: 'Search'), searchInstance.id])}"
        }
        else {
               render(view: "create", model: [searchInstance: searchInstance])
           }
    }
    redirect(action: "show", id: searchInstance.id)
}

有什么想法吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试使用save(failOnError: true)保存对象。如果对象未验证,这将导致grails抛出异常。默认行为是从save方法返回false。

您可以通过在grails.gorm.failOnError=true中设置Config.groovy来使failOnError成为默认行为,但除了故障排除之外,我不会推荐它。