我目前正在做一个grails项目,我必须用GORM映射一个遗留数据库。某些数据库列由触发器自动生成。
现在我的问题是,在保存实体后,自动生成的列的状态不会反映在实体中。
我知道我可以做entity.refresh()
强制从数据库中重新加载整个实体。但我不认为这是一个可行的解决方案,因为这种情况应该透明地处理。而且我不想在每次保存后显式刷新实体。
我确实知道在休眠中存在一个@Generated(GenerationTime.INSERT)
注释,它完全可以执行我想做的事情。
有没有等效的方法可以使用 GORM 做到这一点?
我不相信 GORM 原生支持这一点(但如果另一个答案可以显示一种方法,我会感兴趣!(但这里的文档:http://docs.grails.org/latest/ref/Domain%20Classes/refresh.html 表明刷新确实是正确的方法。
您可以将其与支持的事件(afterInsert 和 afterUpdate 应该适合您(结合使用以刷新对象。 这不是完全透明的,但至少完全包含在域对象中。
// I didn't actually test this but it should work like this, or similar.
//Put the method in your domain object itself and it will be called automatically.
def afterInsert(){
this.refresh()
}