0

我正在尝试使用 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 中。我是不是少了点什么?或者为什么我无法保存实例?

谢谢你的建议,马特奥

4

1 回答 1

1

我认为您需要启动一个新transaction的才能保存在 mongodb 中。如果您注意到,交易CarState将是MySQL。为了与事件进行交易,mongodb必须afterUpdate有一个新的 mongodb 交易。试试这个。

def afterUpdate() {
   CarStateLogItem.withTransaction{status ->
       def logItemInstance = new CarStateLogItem(this.properties)
       logItemInstance.save(failOnError: true)
   }
}
于 2013-05-21T13:33:23.330 回答