Grails验证进入一个循环,永不中断

Grails验证进入一个循环,永不中断,grails,constraints,gorm,Grails,Constraints,Gorm,我有一个类用户,其验证规则如下: def readyUserCount = User.createCriteria().count({ eq('userStatus',UserStatus.Ready) }) if(100 > readyUserCount){ return true } 验证后,它将对数据库中的现有行进行计数。问题是,当我更新一个对象时,它将触发验证,验证将触发刷新,刷新将触发验证,验证将触发刷新,并且永不中断。(如

我有一个类用户,其验证规则如下:

def readyUserCount = User.createCriteria().count({
    eq('userStatus',UserStatus.Ready)                   
})
if(100 > readyUserCount){
    return true
}
验证后,它将对数据库中的现有行进行计数。问题是,当我更新一个对象时,它将触发验证,验证将触发刷新,刷新将触发验证,验证将触发刷新,并且永不中断。(如果插入而不是更新,则不会发生此问题)。有人能帮我吗?

试试:


语句的名称是什么?它是在静态约束中,还是在beforeUpdate拦截器或其他地方?它在静态约束中,save()操作在withNewSession()块中调用,它可以工作。如果我在没有验证的情况下调用save.save(validate:false),它也会起作用。好吧,我不知道是否没有调用验证器,或者它的值只是通过
validate:false
丢弃了。谢谢:)^ ^,你说得对,没有调用验证程序。因为我不希望在一个请求中启动新会话。可以通过调用validate()手动触发验证器我想知道为什么会发生这种情况?这是圣杯的错误吗?对不起,发生了什么?冲洗循环?任何动态查找器或
Criteria
都会在Grails中为可能受条件影响的每个对象触发flush()。这就是为什么我们需要一个新的会议。拜托,这只是每个
save()
的一个会话-我希望用户不要太频繁地
save()
def count = User.withNewSession{ User.countByUserStatus(UserStatus.Ready) }