mongodb - Grails MongoDB无法保存在afterUpdate中

标签 mongodb grails gorm grails-plugin

我正在尝试使用mongoDB grails插件将一些域类放入MongoDB中。有些类保留在MySQL中。即使将域类实例保存到MongoDB中,一切都可以正常工作(例如,在 Controller 代码中的服务中)。但是,如果我尝试从某些not-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"

   ...
}

奇怪的是,如果我从 Controller 运行afterUpdate()代码,它将保存到MongoDB中。我缺少什么吗?还是为什么我不能保存实例?

感谢您的任何建议,
马泰奥

最佳答案

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

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

关于mongodb - Grails MongoDB无法保存在afterUpdate中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16664760/

相关文章:

javascript - 确保 "done()"被称为JS错误

grails - 在grails模型关联中需要帮助

grails - 如何在grails中的类别下显示子类别?

grails - GORM hasMany使用多个列

hibernate - 约束条件查询以获取笛卡尔积并返回结果作为对象数组列表

mongodb - 有什么方法可以将大型机文件与 Mongodb 或任何 Hadoop 组件集成

javascript - require 在 node.js 中的行为

java - 数组未正确初始化。 BasicDBObject 无法创建 BasicDBObject 类型的数组

grails - 保存第二版本的grails对象

forms - grails:仅对一个字段/属性进行自定义验证