我有以下Grails GORM域类:
@Transactional
def save(Item item) {
...
if (item.hasErrors()) {
...
}
category.addToItems(item)
if (!category.save(flush: true)) { ... }
}
在我的ItemController中,我有一个项目的create()和save()动作。
save()动作如下所示:
item.hasErrors()
问题是 category.addToItems(item)
if (!category.save(flush: true)) { ... }
if (item.hasErrors()) {
...
}
将报告错误,因为`item.category``为空。它尚未与该类别相关联。
如果我切换像:
这样的块/g
然后我在保存之前无法检查项目错误。
处理此问题的最佳方法是什么?
答案 0 :(得分:0)
你试过吗
category.addToItems(item)
if (item.hasErrors()) {
...
}
if (!category.save(flush: true)) { ... }
编辑:
在我的grails项目中,我手动处理集合。这意味着在这个例子中我添加了Category:
static mapping = {
items cascade: 'none'
}
然后在保存对象时,我先保存类别,然后保存所属项目。像:
category.addToItems(items)
if (!category.save(flush:true)) { ... } // will not save items
if (!item.save(flush:true)) { ... }
如果您不想在项目出错时保存类别,请确保您在交易中并使用
item.save(failOnError:true)
答案 1 :(得分:0)
category.addToItems(item)
if (!category.save(flush: true)) { ... }
不要在Item控制器中处理此问题。首先创建项目(无关系),然后创建类别。使用
Category.addToItems(item).save(failOnError:true)
为什么不在此阶段将它留给脚手架为您生成代码?它管理关系,您可以清楚地了解正在发生的事情,然后根据您的需求量身定制?
答案 2 :(得分:0)
您可以致电obj.validate( [ 'someProp', 'someOtherProp' ] )
仅验证所需的媒体资源。
有关详细信息,请参阅ref-doc