我正在尝试使用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中。我缺少什么?或者为什么我无法保存实例?
感谢您的任何建议, 刁
答案 0 :(得分:1)
我认为你需要发起一个新的transaction
才能保存在mongodb中。如果您发现,CarState
的交易将为MySQL
。为了与mongodb
事件中的afterUpdate
进行交易,必须有一个新的mongodb事务。试试这个。
def afterUpdate() {
CarStateLogItem.withTransaction{status ->
def logItemInstance = new CarStateLogItem(this.properties)
logItemInstance.save(failOnError: true)
}
}