我正在使用getPersistentValue()方法来确定属性如何更改。但是,我发现即使没有显式保存该对象,该方法也会返回不同的值。
这就是我一直缩小到的范围...

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);

服务电话只是另一个条件搜索,如果驾驶员在某个日期被雇用,则返回驾驶员
 def driver=Drivers.createCriteria().get{
        and{
           eq('id',id);
           eq('division',division);
           le('startDate',compareDate);
           or{
               ge('endDate',compareDate);
               isNull('endDate');
           }
         }

     };
    return service

由于某种原因,服务中的此查询会强制我的其他对象更新其持久值?有人可以解释为什么以及如何避免这种情况吗?

最佳答案

我能够通过导入事务注释来解决此问题

import org.springframework.transaction.annotation.Transactional

然后添加
@Transactional(readOnly = true)

在被调用的方法之前。

但是,这并非在所有情况下都可行,因为并非所有服务调用都是只读的。

关于grails - grails getPersistentValue()值更改而不保存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39668468/

10-10 15:31