mongodb - 保存在 Controller 中时未调用 GORM 事件(beforeInsert)
问题描述
我有一个简单的 Domain 类,它使用“assigned”作为 id 生成器。这是因为我想根据其他一些参数手动生成 id,并在调用“beforeInsert”事件时通过设置 id 参数来自动化它。问题是由于某种原因,beforeInsert()
从控制器将新域对象保存到数据库时永远不会调用它。为什么它不起作用?
PS:我得到的错误是
Caused by: org.springframework.dao.DataIntegrityViolationException: Entity [Testy : (unsaved)] has null identifier when identifier strategy is manual assignment. Assign an appropriate identifier before persisting.
暴躁的领域类:
import grails.mongodb.MongoEntity
import org.bson.types.ObjectId
class Testy implements MongoEntity<Testy> {
ObjectId id
Integer i
static mapping = {
id generator: "assigned"
collection "testy"
database "test"
}
static constraints = {
i nullable: false
}
def beforeInsert() {
id = new ObjectId()
return true
}
}
TestyController
package hegardt.backend.grails
import grails.gorm.transactions.Transactional
import org.springframework.http.HttpStatus
class TestyController {
@Transactional
def save() {
Testy instance = new Testy()
bindData(instance, request.getJSON())
instance.validate()
if (instance.hasErrors()) {
respond instance.errors, view: 'create' // STATUS CODE 422
return
}
instance.insert(flush: true)
render HttpStatus.OK
}
}
解决方案
推荐阅读
- reactjs - 如何在 reactjs 组件中动态加载 json?
- python - 如何使用 Python 一次播放两个声音?
- python - 使用 IF 语句的 Python 用户定义函数不起作用
- xamarin.forms - 如何将 stacklayout 内容转换为 xamarin 形式的流
- python - 没有for循环的意大利面条情节?
- optimization - Webpack 4 SplitChunkPlugin 的 maxSize 与 maxInitialRequests
- mongodb - MongoDB计算不同的项目
- git - Heroku git push - “致命:远程端意外挂断”
- docker - 如何为 docker 并行测试设置机器人框架项目
- bash - 在 shell 脚本中使用 sed 替换文件中的值