GORM - all-delete-orphan无法正常工作

时间:2012-11-15 09:57:02

标签: grails gorm

我在mygrails项目中有两个名为Profile and License的课程 以下是课程中重要内容的概述

class Profile {

    Set<Licence> licenceKeys

    static hasMany = [licenceKeys:Licence]

   static constraints = {
        licenceKeys nullable:true
    }
    static mapping = {
        licenceKeys cascade: 'all-delete-orphan'
    }
}

class Licence {

    Profile profile
    String licenceKey

    static belongsTo = [profile:Profile]

    static constraints = {
        profile nullable:false
        licenceKey blank:true, nullable:true, unique:true
    }   
}

当我在我的一个控制器中运行以下代码时

    if (!profile.licenceKeys.clear()) {
        log.error ("Error occured removing licence keys from the database");
        userProfile.errors.each { err -> println err; }
    }  else {
        log.info("Successfully remove licence keys from the database");
    }

我在控制台中收到以下错误消息,licencekeys保留在数据库中 org.springframework.validation.BeanPropertyBindingResult:0错误 密钥将从Profile类中设置的licenceKeys中删除,但仍保留在数据库

我有2个问题 是否有可能为我得到的错误消息获得更好的调试输出 我是否遗漏了任何内容以确保从数据库中删除了licekeys?

由于

1 个答案:

答案 0 :(得分:0)

clear()方法实际上不会执行删除clear()之后要保存的数据库的工作。尝试...

profile.licenceKeys.clear();
if (!profile.save(flash:true)) {
    log.error ("Error occured removing licence keys from the database");
    userProfile.errors.each { err -> println err; }
}  else {
    log.info("Successfully remove licence keys from the database");
}

对于你的第二个问题,你会想要从保存失败的域对象中获取错误......

 if (!profile.save(flash:true)) {
    log.error ("Error occured removing licence keys from the database");
    profile.errors.each { err -> println err; }
}