如何从Grails标准中的sum()获取值

时间:2015-10-06 00:04:54

标签: grails gorm grails-2.3

我无法将+运算符与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
  

无法执行null + null。 Stacktrace如下:消息:无法执行null + null

3 个答案:

答案 0 :(得分:0)

您需要解决几个问题:

  1. 条件查询返回null
  2. obj.nopersonas为空
  3. 条件查询

    要修复条件查询,请在没有投影的情况下开始:

    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为空,我假设该属性可以为空。如果该属性应该可以为空,那么您需要在验证器中考虑该属性。

答案 1 :(得分:0)

它正在发挥作用。

Integer variable_name = Integer.valueOf(resultado [0] .toString())

答案 2 :(得分:0)

您可以简单地处理空条件:

def aff = (resultado[0] ?: 0) + (obj.nopersonas ?: 0)