如何为grails中的许多属性编写约束
我在grails应用程序中有三个类如何为grails中的许多属性编写约束,grails,gorm,Grails,Gorm,我在grails应用程序中有三个类 class Category { String name } class Application { String name static hasMany =[specialCategoryies:SpecialCategory] } class SpecialCategory { Category category Integer points static belongsTo =[application:
class Category {
String name
}
class Application {
String name
static hasMany =[specialCategoryies:SpecialCategory]
}
class SpecialCategory {
Category category
Integer points
static belongsTo =[application:Application]
}
在这里,当我保存应用程序实例时,我不想保存重复的应用程序
specialCategories值,如..specialCategories没有相同的
再次输入类别值
application.addToSpecialCategoryies(newSpecialCategory(category:Category.get(1),points:2))
application.addToSpecialCategoryies(newSpecialCategory(category:Category.get(1),points:3))
这里我的应用实例应该出现分类值重复的错误。。
那么,如何为域类中的多个属性定义约束呢。。。。。。?
建议如何编写约束以避免重复类别值您可以尝试在应用程序约束部分使用自定义验证器。例如,检查重复属性值的一种方法是将值收集到数组中,并将其与相应的唯一数组进行比较(删除重复的元素): 当试图用现有类别保存特殊类别时,保存时将抛出验证错误。您可以使用以下各项进行测试:
def cat1 = new Category(name:"Cat 1").save(flush:true)
def cat2 = new Category(name:"Cat 2").save(flush:true)
def app = new Application()
app.name = "Test"
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:2))
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(2), points:2))
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:3))
if ( app.save(flush:true) ){
log.info "Saved!"
} else {
log.error "NOT Saved. Error:"
app.errors.each {
log.error it
}
}
我不认为你能用hasMany来做这个。最好的解决方案可能是定义自己的关系,链接域类型,并在其中使用“唯一”约束强制执行规则。
def cat1 = new Category(name:"Cat 1").save(flush:true)
def cat2 = new Category(name:"Cat 2").save(flush:true)
def app = new Application()
app.name = "Test"
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:2))
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(2), points:2))
app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:3))
if ( app.save(flush:true) ){
log.info "Saved!"
} else {
log.error "NOT Saved. Error:"
app.errors.each {
log.error it
}
}