我正在开发一个应用程序,它从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)
}
有什么想法吗? 谢谢。
答案 0 :(得分:0)
尝试使用save(failOnError: true)
保存对象。如果对象未验证,这将导致grails抛出异常。默认行为是从save方法返回false。
您可以通过在grails.gorm.failOnError=true
中设置Config.groovy
来使failOnError成为默认行为,但除了故障排除之外,我不会推荐它。