有关保存在GORM中的更多信息

2020年11月28日 62点热度 0条评论

我有一个简单的代码块,返回false

PromoDebit promoDebit = new PromoDebit();
            promoDebit.promoCode=promoCode;
            promoDebit.userId=userId;
            promoDebit.countUsages=countUsages;
            promoDebit.endDate=endDate;
            promoDebit.startDate=startDate;
            promoDebit.status=1;
            promoDebit.calcValue=Float.parseFloat(p.getProperty("promoPercent"));
             if(promoDebit.save(flush: true)){
                 log.info "GOOD!"
            } else {
                 log.info "BAD!"
             }

如何获得有关GORM.save失败的更多信息?即使我在DataSource.groovy中打开logSql,Stdrout日志也不会显示

解决方案如下:

首先,确保正确配置了Log4j。
这里http://grails.org/doc/2.3.1/guide/conf.html#logging
而且,如果您想了解有关GORM的更多详细信息,请保存失败,例如

        PromoDebit promoDebit = new PromoDebit();
        promoDebit.promoCode=promoCode;
        promoDebit.userId=userId;
        promoDebit.countUsages=countUsages;
        promoDebit.endDate=endDate;
        promoDebit.startDate=startDate;
        promoDebit.status=1;
        promoDebit.calcValue=Float.parseFloat(p.getProperty("promoPercent"));

然后 ,

if (!promoDebit.save()) {
   log.warn myDomainObj.errors.allErrors.join(' \n') 
   //each error is an instance of  org.springframework.validation.FieldError    
}

而且,我喜欢这个

if (!promoDebit.save()) {
    promoDebit.errors.each {
        println it
    }
}

如果要为每个域类引发异常,则只需设置
grails.gorm.failOnError to true in grails-app/conf/Config.groovy或简单地

promoDebit.save(failOnError:true)

干杯!