我不能将+运算符与resultado[0] + obj.nopersonas一起使用,nopersonas是一个整数。

fhinicio(blank:false, validator : { val, obj ->
    def diff = groovy.time.TimeCategory.minus(obj.fhfinal, val)
    def total = diff.hours*60 + diff.minutes
    if (total < 15){
        return "reserva.fhfinal.tiempo.min.label"
    } else {
        if (total > 60) {
            return "reserva.fhfinal.tiempo.max.label"
        } else {
            def reserva = Reserva.createCriteria()
            def resultado = reserva.list() {
                or {
                    and {
                        ge('fhinicio', val)
                        le('fhinicio', obj.fhfinal)
                    }
                    and {
                        ge('fhfinal', val)
                        le('fhfinal', obj.fhfinal)
                    }
                }

                projections {
                    sum('nopersonas')
                }
            }

            //this is not working
            def aff = resultado[0] + obj.nopersonas

最佳答案

您需要解决几个问题:

  • 条件查询返回空
  • obj.nopersonas为空

  • 条件查询

    要修复条件查询,请先不使用投影:
    def reserva = Reserva.createCriteria()
    def resultado = reserva.list {
        or {
            and {
                ge('fhinicio', val)
                le('fhinicio', obj.fhfinal)
            }
            and {
                ge('fhfinal', val)
                le('fhfinal', obj.fhfinal)
            }
        }
    }
    

    确保您获得了Reserva的适当实例。然后,添加投影,因为您期望一个值,所以请使用get()方法而不是list()。
    def reserva = Reserva.createCriteria()
    def resultado = reserva.get {
        or {
            and {
                ge('fhinicio', val)
                le('fhinicio', obj.fhfinal)
            }
            and {
                ge('fhfinal', val)
                le('fhfinal', obj.fhfinal)
            }
        }
    
        projections {
            sum('nopersonas')
        }
    }
    
    def aff = resultado + obj.nopersonas
    

    obj.nopersonas

    由于obj.nopersonas为null,因此我假设该属性为可空。如果该属性应为可为空,则需要在验证器中说明该属性。

    08-28 23:17