2015-10-06 71 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)