2016-09-23 6 views
0

私はプロパティの変更方法を決定するためにgetPersistentValue()メソッドを使用しています。しかし、私は明示的にオブジェクトを保存していなくても、このメソッドが異なる値を返すことを発見しました。 はここでサービスコールは、ちょうど別の基準は、彼/彼女が日付grails getPersistentValue()保存せずに値が変更される

def driver=Drivers.createCriteria().get{ 
     and{ 
      eq('id',id); 
      eq('division',division); 
      le('startDate',compareDate); 
      or{ 
       ge('endDate',compareDate); 
       isNull('endDate'); 
      } 
     } 

    }; 
    return service 
で採用された場合は、ドライバを返すように検索され

trip.properties=[start:params.startmile, 
     end:params.endmile, 
     satusFlag:params.statusFlag, 
     description:params.description    
     ]; 

    // print statusFlag for checking 
    log.debug(trip.getPersistentValue('statusFlag')+":"+trip.statusFlag); 

    def driver=driverService.getValidDriver(params.driver,params.date); 
    //the persistent value of statusFlag has changed!!!! 
    log.debug(trip.getPersistentValue('statusFlag')+":"+trip.statusFlag); 

...私はすべての方法ダウンにそれを狭くしてきたものです

何らかの理由で、サービス内のこのクエリによって、他のオブジェクトが永続的な値を更新するように強制されますか?なぜ誰かがこれを避ける方法を説明することができますか?

+0

値を更新するために明示的に保存する必要はありません。クエリでは、どのような形式の更新も表示されませんが。おそらく、.listや.readのようなものを試してみてください。 – Vahid

+0

http://stackoverflow.com/questions/21529503/how-to-set-default-behaviour-to-grails-criteria – Vahid

答えて

0

私は、トランザクションの注釈に

import org.springframework.transaction.annotation.Transactional 

をインポートして、呼び出されたメソッドの前に

@Transactional(readOnly = true) 

を追加することによってこの問題を解決することができました。

ただし、すべてのサービスコールが読み取り専用になるわけではないため、すべての場合に機能しません。

関連する問題