2015-10-06 44 views
1

我不能resultado[0] + obj.nopersonas使用+运营商的价值,nopersonas是一个整数。如何从SUM()在一个Grails标准

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 

无法执行空+空。堆栈跟踪如下:消息:无法执行空+空

+0

那么它似乎'resultado [0]'和'OBJ .nopersonas'都是'null'。如果出现这种情况,请通过调试或仅打印值进行检查。 –

回答

0

你有几个问题需要解决:

  1. 的标准查询返回null
  2. 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为空,我假设属性为空。如果该属性应该是空的,那么您需要在验证器中说明该属性。

0

它正在工作。

整型变量名= Integer.valueOf(resultado [0]的ToString())

0

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

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