Grails MongoDB不保存在afterUpdate中

时间:2013-05-21 07:48:37

标签: mongodb grails gorm grails-plugin

我正在尝试使用mongoDB grails插件将我的一些域类放入MongoDB。有些类保留在MySQL中。即使将域类实例保存到MongoDB中(例如在控制器代码上的服务中),一切都可以正常工作。但是,如果我尝试从某个非mongoDB类的afterUpdate()中保存实例,则它不起作用。它不会抛出任何异常或其他......

我的非mongoDB域类:

class CarState extends AbstractCarState {

   ...

   def afterUpdate() {
      def logItemInstance = new CarStateLogItem(this.properties)
      logItemInstance.save(failOnError: true)
   }
}

MongoDB域类:

class CarStateLogItem extends AbstractCarState {
   ObjectId id

   static mapWith = "mongo"

   ...
}

奇怪的是,如果我从控制器运行afterUpdate()代码,它会保存到MongoDB中。我缺少什么?或者为什么我无法保存实例?

感谢您的任何建议, 刁

1 个答案:

答案 0 :(得分:1)

我认为你需要发起一个新的transaction才能保存在mongodb中。如果您发现,CarState的交易将为MySQL。为了与mongodb事件中的afterUpdate进行交易,必须有一个新的mongodb事务。试试这个。

def afterUpdate() {
   CarStateLogItem.withTransaction{status ->
       def logItemInstance = new CarStateLogItem(this.properties)
       logItemInstance.save(failOnError: true)
   }
}