【问题标题】:Grails behavior method AddTo*Grails 行为方法 AddTo*
【发布时间】:2014-01-23 13:42:28
【问题描述】:

我的 addTo* 方法不稳定,我有一个记录,经常需要在一个实例中生成关系信息。问题是当我在短时间内放置多个插入时,它们不再保留在数据库中,而不是在它们返回之后,它们只是被丢弃的时间。

我的简单类是 'Occurrence' 和 'Monitoring' ,每当我打电话时,我都必须注册它,它发生在连续 2 条记录之后,第 3 条不再保留在数据库中,我丢失了记录。

Class Occurrence implements Serializable{
...
hasMany = [accompaniments: Monitoring]
...
}

Class Monitoring implements Serializable{
...
belongsTo = [occurrence : Occurrence]
...
}

让控制器看起来像这样:

def regMonitoring(Long id){

        def chamadoInstance = Occurrence.get(id)

        if (!chamadoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'Occurrence .label', default: 'Occurrence '), id])
            return
        }

        chamadoInstance.status = StatusChamado.findByCodigo("MOV") 

        if (!chamadoInstance.save(flush: true)) {
            render(view: "editMonitoring", model: [chamadoInstance: chamadoInstance])
            return
        }


        def mov = chamadoService.regMonitoring("") //returns an instance of Customer with preset output values ​​.

        chamadoInstance.addToAccompaniments (mov) 

        redirect(action: "showChamado", id: chamadoInstance.id)


    }

【问题讨论】:

  • addToAccompaniments 后添加 chamadoInstance.save(flush: true)。
  • 解决了问题!谢谢!我意识到在此更改之前,它是第一次实例化并且在第三个实例之后没有持久化。我想知道为什么会这样?
  • 很高兴它解决了问题(添加为答案,以便您接受并投票)。

标签: grails grails-orm


【解决方案1】:

在您添加到集合后添加您的域实例的保存。

chamadoInstance.addToAccompaniments (mov) 
chamadoInstance.save(flush: true)

这应该可以解决问题。

【讨论】:

  • 我意识到,在这个变化之前,第一次实例化它,第三个实例之后没有持久化。我想知道为什么会这样?
  • 如果不认真调试 GORM 处理的方式,我就完全不知道。我怀疑这与 Hibernate 缓存实例的方式有关。
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多